Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   lNet unter Freepascal/Lazarus: Disconnect nach SendMessage (https://www.delphipraxis.net/181595-lnet-unter-freepascal-lazarus-disconnect-nach-sendmessage.html)

Yhorcal 27. Aug 2014 20:02


lNet unter Freepascal/Lazarus: Disconnect nach SendMessage
 
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

Yhorcal 27. Aug 2014 23:18

AW: lNet unter Freepascal/Lazarus: Disconnect nach SendMessage
 
Die Lösung:

Das SendMessage kommt zu schnell. Es sollte besser bei OnConnect aufgerufen werden.

JamesTKirk 28. Aug 2014 06:21

AW: lNet unter Freepascal/Lazarus: Disconnect nach SendMessage
 
Zur Erklärung:
Delphi-Quellcode:
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
Delphi-Quellcode:
CallAction
aufrufen). Bevor du nun also etwas verschicken kannst, muss ersteinmal wieder die Nachrichtenbehandlung ne Chance bekommen zu laufen, sprich dein
Delphi-Quellcode:
OnCreate
-Handler muss verlassen werden; alternativ könntest du auch mal einen Aufruf von
Delphi-Quellcode:
Application.ProcessMessages
zwischen
Delphi-Quellcode:
Connect
und
Delphi-Quellcode:
SendMessage
ausprobieren, wobei
Delphi-Quellcode:
OnConnect
auf jeden Fall der saubere Weg ist, da du so sicher sein kannst, dass die Verbindung wirklich zustande kam. :)

Gruß,
Sven


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz