Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi [Indy10] ReadStream hängt Client auf (https://www.delphipraxis.net/90619-%5Bindy10%5D-readstream-haengt-client-auf.html)

Zacherl 20. Apr 2007 16:30


[Indy10] ReadStream hängt Client auf
 
Hey,

ich habe clientseitig folgenden Code:

Delphi-Quellcode:
if IdTCPClient1.Connected then
  begin
    SS := TStringStream.Create('');
    try
      IdTCPClient1.IOHandler.ReadStream(SS);
      // testen
      if SS.DataStream <> '' then
      begin
        ShowMessage(SS.DataStream);
      end;
    finally
      SS.Free;
    end;
  end;
Das Problem ist nur, dass sich der Client aufhängt, wenn keine Daten für ReadStream vorhanden sind. Vorher sende ich vom Server mittels IOHandler.Write(SS, 0, true) einige Streams zum Client, die auch wunderbar empfangen werden. Erst sobald ich keine Streams mehr sende hängt der Client sich auf.

Udontknow 20. Apr 2007 16:40

Re: [Indy10] ReadStream hängt Client auf
 
Hallo!

Ja, das ist tatsächlich die normale Vorgehensweise bei Indy. Du rufst Readstream auf, und das Programm wird solange warten, bis endlich ein Stream ankommt. Wenn keiner mehr kommt... Tja.

Deshalb habe ich das Lesen in einen separaten Thread ausgelagert. Ich weiss nicht, ob ich das hier auch gepostet habe, aber im DF gibts die SimpleTCP-Komponenten von mir, da kannst du dich ja mal am Code orientieren.

Cu,
Udontknow

Zacherl 20. Apr 2007 17:03

Re: [Indy10] ReadStream hängt Client auf
 
Mh okey, also das ganze in einem Thread ablaufen lassen kann ich machen, aber geht der ganze Lesevorgang dann nicht trotzdem auf die CPU Auslastung. Am besten werde ein TimeOut Wert nur für den Fall, dass kein Stream da ist .. aber nicht, dass hinterher mitten im Stream abgebrochen wird .. das wäre fatal.

Udontknow 20. Apr 2007 17:07

Re: [Indy10] ReadStream hängt Client auf
 
Nein nein, der verbrät keine (oder nur sehr wenig) CPU-Zeit. Er schläft eben genau so, wie der Hauptthread es nun bei dir tut. Du kannst ja mal währenddessen dir die CPU-Last anschauen, die wird nicht hochgepusht. Die Indy-Komponenten selber warten eben irgendwo auf eine Reaktion vom BS oder ähnliches, währenddessen tun sie nichts.

Cu,
Udontknow

Zacherl 20. Apr 2007 17:16

Re: [Indy10] ReadStream hängt Client auf
 
Ah gut .. vielen Dank dir .. dann werde ich die Abfrage mal in einen Thread auslagern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 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