Entwickler-Ecke
Internet / Netzwerk - IdTCPClient.ReadLn in einem thread packen
gitta - Sa 17.06.06 12:00
Titel: IdTCPClient.ReadLn in einem thread packen
Hallo Zusammen,
Ich verwende Delphi5, Indy9 und die Komponente IdTCPClient.
Der Client logt sich auf einen TCP-Server ein, und
bekommt permanent irgend welche Textzeilen übertragen.
Jede eingehende Zeile soll in eine TStringList geschrieben werden.
Das macht er so lange bis der Client die Verbindung trennt.
Das ist die komplette Anforderung.
Ich habe leider keine Erfahrung mit TCP und threads.
Könnt Ihr mir bitte helfen das IdTCPClient.ReadLn
in ein thread zu packen welcher permanent aus dem socket liest.
Oder kennt Ihr ein Tutorial wo ich das abschauen könnte.
Gruß Gitta.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure btnConnectClick(Sender: TObject); var LString, RString : String; begin with IdTCPClient do begin Host := edtHost.Text; Port := StrToint(edtPort.Text); try Connect;
RString := IdTCPClient.ReadLn; lbCommunication.Items.Insert(0,'Server said -> ' + RString);
except on E : Exception do begin ShowMessage(E.Message); end; end; end; end; |
gitta - Sa 17.06.06 18:35
Hallo Zusammen,
hab doch noch ein Problem.
Wenn die connection zum Server aufgebaut ist, sende ich ein Commando zu Server,
und bekomme auch permanent meine Antworten, so wie es gerne hätte.
Das Problem ist, sobald der Thread für das ReadLn gestartet ist, kann ich
kein weiteres Kommando zum Server senden. Auch dann nicht,
wenn der Server gerade nichts sendet.
Irgend eine Idee was ich machen müsste um weiterhin senden zu können?
Gruß Gitta
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| procedure TfrTCPIntercom.IdTCPClientConnected(Sender: TObject); var LString : String; begin Thread := TReadThread.Create(True); Thread.FreeOnTerminate := True;
IdentifyToServer; Anzeigen('* Verbindung zum Server hergestellt'); end;
procedure TReadThread.Execute;
begin try While (not Terminated) and (frTCPIntercom.IdTCPClient.Connected) do Begin Nachricht := frTCPIntercom.IdTCPClient.ReadLn(); Synchronize(EingangVerarbeiten); End; except on e: exception do begin if frTCPIntercom.IdTCPClient.Connected then frTCPIntercom.IdTCPClient.Disconnect; frTCPIntercom.Anzeigen('* Der Read Thread hatte irgendein Problem '+e.Message); end; end; end; |
gitta - Sa 17.06.06 20:43
sorry, natürlich kann ich weiterhin senden. Das Problem war
wieder einmal von dem Monitor.
Gruß Gitta
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!