Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Hilfe bei Readln von TIdTCPClient (https://www.delphipraxis.net/41006-hilfe-bei-readln-von-tidtcpclient.html)

WMeinecke 24. Feb 2005 14:40


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.

Binärbaum 24. Feb 2005 14:54

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

WMeinecke 24. Feb 2005 21:13

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

WMeinecke 25. Feb 2005 06:58

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.

WMeinecke 25. Feb 2005 06:58

Re: Hilfe bei Readln von TIdTCPClient
 
So, hier nun der Quelltext

Delphi-Quellcode:
  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;
Wie gesagt. Ich hätte es ganz gerne ohne das Disconnect.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 Uhr.

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