lnet TLTCPComponent: direkt nach Connect() kein Send...

Alle Fragen zur Netzwerkkommunikation
Antworten
vx-rexx
Beiträge: 21
Registriert: Do 11. Mär 2010, 10:21

lnet TLTCPComponent: direkt nach Connect() kein Send...

Beitrag von vx-rexx »

bzw. SendMessage

Moin,

ich habe eine Merkwürdigkeit bei der Benutzung von lnet:
Nach einer erfolgreichen Verbindung per Connect() und einer nachfolgenden Datenübertragung erhalte ich immer ein "Error on connect: connection refused". Setze ich aber vor dem SendMessage() ein showMessage('irgendwas'), dann klappt es.

Codebeispiel unter Nutzung des sehr guten LNet-Tutorial von mintpc:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var Port : integer;
    ServerIP : String;
    Verbindungsaufbau : boolean;
begin
    Port := StrToInt(LabeledEdit1.Text);
    ServerIP := LabeledEdit2.Text;
    Verbindungsaufbau := Client.Connect(ServerIP,Port);
    { Alternativ:
      Client.Host:= ServerIP;
      Client.Port:= Port;
      Client.Connect;
      oder auch nur:
      Client.Connect(ServerIP,Port); }

    if Verbindungsaufbau then
      Memo1.Append('Die Verbindung wird aufgebaut . . .');
 
    ShowMessage('Test');   // <- so geht es, nach auskommentieren kommt dann
                           //     "Error on connect: connection refused"
    Client.SendMessage('12345');
end;


Ich brauche die durchgehende Connect-Send-Disconnect Funktionalität, so dass dieses Verhalten für mich einen Fehler darstellt.
Vielleicht hat jemand eine Idee für mich? :idea:

Gruß
vx-rexx

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: lnet TLTCPComponent: direkt nach Connect() kein Send...

Beitrag von MAC »

ich schätze mal nicht das Lnet ein showmessage benötigt.
Vorallem da ich schon lange damit areite und es soetwas nicht gebracuht hat.
Was ich schätze ist, das durch die Nachricht Das programm kurze zeit angehalten wird.
In dieser Zeit wird die verbindung (seperater Thread, oder so) hergestellt und Das Sendmessage funktioniert. (im lokalen netzwerk werden ca. 0 ms benötigt.)

Also entweder versuchst du ein

Code: Alles auswählen

sleep(20);
application.Processmessages;
sleep(20);

oder du sendest den Text erst wenn das OnConnect aufgerufen wurde.

letzteres ist die sauberer methode.

Code: Alles auswählen

Signatur := nil;

vx-rexx
Beiträge: 21
Registriert: Do 11. Mär 2010, 10:21

Re: lnet TLTCPComponent: direkt nach Connect() kein Send...

Beitrag von vx-rexx »

MAC hat geschrieben:oder du sendest den Text erst wenn das OnConnect aufgerufen wurde.


Danke. So funktioniert es. Das mit dem sleep() hatte ich schon probiert, aber nicht mal sleep(2000) klappte.

Ich muss wohl doch noch mehr darauf achten, das ich hier ja Event-gesteuert denken muß und nicht wie in bisher in c funktional.

Gruß
vx-rexx

Antworten