![]() |
Indy TCPClient: Readln() Problem
Hi!
Ich hab ein Problem mit der Indy 9 Komponente IdTCPClient. Ich kann zwar zum Server verbinden und ihm auch Nachrichten schicken, aber mit dem Empfangen gibts Probleme. Ich hab schon in den anderen Threads geschaut aber so richtig geholfen hat keiner. Ich lese mit einem Timmer alle 300 Millisekunden die empfangenen Daten aus also mit Readln() Aber sobald er keine Daten mehr bekommt hängt sich das Programm auf! Hab schon mal mit try ... except versucht ging auch nicht. Es gibt ja kein spezielles Event dafür, dass wenn man Daten empfängt irgendwa smachen kann. Ich muss also irgednwie überprüfen, dass wenn er Daten empfängt aber auch nur dann, dass er die ausliest. Hier mal der Code des Clienten
Delphi-Quellcode:
Der Server schickt die Daten per Writeln.
unit Core;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, ShockwaveFlashObjects_TLB, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, ExtCtrls, StdCtrls, IdAntiFreezeBase, IdAntiFreeze; type TMain = class(TForm) flash: TShockwaveFlash; net: TIdTCPClient; timer: TTimer; Button1: TButton; size: TEdit; IdAntiFreeze1: TIdAntiFreeze; procedure Button1Click(Sender: TObject); procedure netDisconnected(Sender: TObject); procedure netConnected(Sender: TObject); procedure timerTimer(Sender: TObject); procedure flashFSCommand(ASender: TObject; const command, args: WideString); procedure FormResize(Sender: TObject); private { Private declarations } public { Public declarations } end; var Main: TMain; implementation {$R *.dfm} procedure TMain.FormResize(Sender: TObject); begin flash.Width := main.ClientWidth; flash.Height := main.clientHeight; end; procedure TMain.flashFSCommand(ASender: TObject; const command, args: WideString); begin //if (command = '!connect') then //begin //end; end; procedure TMain.timerTimer(Sender: TObject); begin if (net.Connected) then begin showmessage(net.ReadLn()); end; end; procedure TMain.netConnected(Sender: TObject); begin timer.Enabled := true; showmessage('Verbunden'); end; procedure TMain.netDisconnected(Sender: TObject); begin timer.enabled := false; end; procedure TMain.Button1Click(Sender: TObject); begin net.Connect(2000); end; end. Ich hoffe ihr könnt mir helfen ;) Ich bedanke mich im vorraus :D |
Re: Indy TCPClient: Readln() Problem
Hallo Kill0r,
dein Programm hängt sich nicht auf, es wartet lediglich bis Daten kommen. Da du aber alle 300ms über fen Timer ein Readln ausführst, wartet sich dein Programm zu Tode. Schau Dir doch mal die Demos der Indy’s an, da gibt ein gutes Beispiel für einen Server und einen Client. Beides ist ein gutes Gerüst, um darauf aufzubauen. Bye Claus |
Re: Indy TCPClient: Readln() Problem
Ja ok ich schau mir die Demos an ;)
Danke :D Ich find nur merkwürdig das der Server dann wenn der Client wartet, einen Thread Timeout bekommt also die Verbindung ganz rausfliegt. Naja wird wahrscheinlich irgendie überlastet sein der Client, das es die verbindung raushaut. Der Thread kann nun geschlossen werden ;) Cu Kill0r |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 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