![]() |
Hilfe bei Readln von TIdTCPClient
Hallo,
ich hab ein Problem mit dem Lesen von Text über die Readln-Funktion von TIdTCPClient. Beim ersten Lesen kann ich alle Teile einer Response abholen. Wenn ich aber einen neuen Request an den Server schicken, wird die Procedure Writeln() ausgeführt. Will ich nun mittels Redln lesen, bekomme ich die Fehlermeldung "Socket-Fehler # 10053. Die Software hat den Abbruch der Verbindung verursacht". Ich prüfe vor dem Writeln auch noch auf Connected. Das klappt. Dieser Fehler tritt nur ab dem zweiten Senden auf. Wenn ich ein Disconnect nach dem Senden/Empfangen mache, klappt es auch ab dem zweiten. Allerdings wird die Anwendung dadurch sehr langsam. Wer kann mir helfen? Gruss W.M. |
Re: Hilfe bei Readln von TIdTCPClient
Ohne Quelltext ist das schwierig zu sagen, woran es liegt. Vielleicht könntest du ja mal den Code, welcher vom Server und vom Client ausgeführt wird, hier posten.
MfG Binärbaum |
Re: Hilfe bei Readln von TIdTCPClient
Den des Clients kann ich gerne norgen früh posten. Bei dem des Servers hab ich keine Möglichkeit.
Im Grunde läuft das so ab: 1. Connct zum Server 2. Daten aufbereiten 3. Daten an den Server übermitteln, mittels Writeln 4. Daten von Server empfangen mittels Readln. 4.1 Schleife, solange bis Stopp-Flag kommt (immer Readln) 5. Daten weiterverarbeiten 6. Nächsten Datensatz holen und wieder Senden mit Writeln. Was mich wundert , ist, ich prüfe vor dem Writeln, ob der Client connected ist. Dann schreibe ich. Und beim Lesen kommt die Fehlermeldung. Hab auch mal auf die Eigenschaften des Controls geschaut, bevor ich lese, sieht so aus, als ob es verbunden ist, da GracefullyClosed auf false steht. Hab allerdings ein Java-Testprog, welches sich connected und dann mehrere Anfragen nach einander an den Server senden kann, aber davon hab ich leider auch keine Quelltext. Wie gesagt der Quelltext kommt morgen früh |
Re: Hilfe bei Readln von TIdTCPClient
So, hier nun der Quelltext
TRY FullResponse := ''; if not m_oClientSocket.Connected then begin m_oClientSocket.Connect(); end; m_oClientSocket.WriteLn(Request); REPEAT Response := m_oClientSocket.ReadLn(#$A); IF Response <> '' THEN BEGIN FullResponse := FullResponse + Response + #$A; if Response='bla' then break; END; UNTIL Response = ''; EXCEPT ON E: Exception DO BEGIN Showmessage(E.Message); END; END; FINALLY m_oClientSocket.Disconnect; END; Wie gesagt. Ich hätte es ganz gerne ohne das Disconnect. |
Re: Hilfe bei Readln von TIdTCPClient
So, hier nun der Quelltext
Delphi-Quellcode:
Wie gesagt. Ich hätte es ganz gerne ohne das Disconnect.
TRY
FullResponse := ''; if not m_oClientSocket.Connected then begin m_oClientSocket.Connect(); end; m_oClientSocket.WriteLn(Request); REPEAT Response := m_oClientSocket.ReadLn(#$A); IF Response <> '' THEN BEGIN FullResponse := FullResponse + Response + #$A; if Response='bla' then break; END; UNTIL Response = ''; EXCEPT ON E: Exception DO BEGIN Showmessage(E.Message); END; END; FINALLY [b] m_oClientSocket.Disconnect;[/b] END; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:17 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