AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke lNet unter Freepascal/Lazarus: Disconnect nach SendMessage

lNet unter Freepascal/Lazarus: Disconnect nach SendMessage

Ein Thema von Yhorcal · begonnen am 27. Aug 2014 · letzter Beitrag vom 28. Aug 2014
Antwort Antwort
Yhorcal

Registriert seit: 25. Okt 2011
2 Beiträge
 
#1

lNet unter Freepascal/Lazarus: Disconnect nach SendMessage

  Alt 27. Aug 2014, 20:02
Hi,

ich habe ein Problem. Ich habe eine TLTCPComponent komponente, "Client" genannt.

Folgender Code:
Code:
 
procedure TForm1.Create(Sender: TObject);
begin
   Client.Connect(ServerIP, Port); //ServerIP and Port are given...
   Client.SendMessage('SomeText');
end;
Der Server bestätigt die Verbindung nach dem Connect. Danach sollte er den Text "SomeText" erhalten. Er hält allerdings einen Leerstring und dann einen Disconnect vom Client.

Wenn ich folgendes schreibe:

Code:
 
procedure TForm1.Create(Sender: TObject);
begin
   Client.Connect(ServerIP, Port); //ServerIP and Port are given...
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Client.SendMessage('SomeText');
end;
Geht es. Mit dem Formularaufbau wird der Client connected. Dann kann ich die SendMessage per Button ausführen und alles ist ok - richtiger Text gesendet und weiterhin offene Verbindung.

Meine Frage: Warum gehen die beiden Befehle nicht direkt hintereinander, aber wenn ich den einen als ButtonClick auslagere, funktioniert es?

Gruß und Dank,
Yhorcal
  Mit Zitat antworten Zitat
Yhorcal

Registriert seit: 25. Okt 2011
2 Beiträge
 
#2

AW: lNet unter Freepascal/Lazarus: Disconnect nach SendMessage

  Alt 27. Aug 2014, 23:18
Die Lösung:

Das SendMessage kommt zu schnell. Es sollte besser bei OnConnect aufgerufen werden.
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#3

AW: lNet unter Freepascal/Lazarus: Disconnect nach SendMessage

  Alt 28. Aug 2014, 06:21
Zur Erklärung: Connect muss ja erst die Verbindung zum Client aufbauen. Dafür trägt sich der LCL-Teil von lNet in die Nachrichtenbehandlung der LCL ein (im nicht-LCL Fall müsste man CallAction aufrufen). Bevor du nun also etwas verschicken kannst, muss ersteinmal wieder die Nachrichtenbehandlung ne Chance bekommen zu laufen, sprich dein OnCreate -Handler muss verlassen werden; alternativ könntest du auch mal einen Aufruf von Application.ProcessMessages zwischen Connect und SendMessage ausprobieren, wobei OnConnect auf jeden Fall der saubere Weg ist, da du so sicher sein kannst, dass die Verbindung wirklich zustande kam.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz