Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi [Indy] TCPclient.IOHandler.InputBuffer.Size ist oft 0 (https://www.delphipraxis.net/163731-%5Bindy%5D-tcpclient-iohandler-inputbuffer-size-ist-oft-0-a.html)

messie 13. Okt 2011 15:58

[Indy] TCPclient.IOHandler.InputBuffer.Size ist oft 0
 
Moin,

wie schon in einem anderen Thread beschrieben, habe ich einen WLAN-TCP-Server, der kontinuierlich Daten sendet (ca. 20 kB/s).
Da es keine Kommunikation in Richtung Server gibt (nur das connect), muss ich den Puffer regelmäßig abfragen.
Dazu erzeuge ich in einem Thread einen TIdTCPClient, der dann in der Endlosschleife abgefragt wird (im Moment noch als string).

Mein Problem: wenn ich die Buffer.size abfrage, bekomme ich immer eine 0, also auch keine Datenabfrage. Wenn ich die Variable im Fall von Null auf 1 initialisiere, bekomme ich noch regelmäßig 0, aber nicht immer.
Wenn ich wie unten gezeigt, vor jeder Abfrage der Puffergröße ein Byte abfrage, bekomme ich immer sinnvolle Werte. Ich scheine damit irgendetwas zu initialisieren oder aufzuwecken.

Delphi-Quellcode:
while not terminated do
      begin
        s := indyclient.IOHandler.ReadString(1);//hiermit ist die folgende Abfrage zuverlässig
        bytecount := indyclient.IOHandler.InputBuffer.Size;
        if bytecount = 0 then
        begin
          bytecount := 1;//das hilft sporadisch, wahrscheinlich bei jedem zweiten Durchlauf
        end;
        s := indyclient.IOHandler.ReadString(bytecount);
Was passiert da? Gibt es irgendwelche Startsequenzen o.ä, die ich vorher ausführen muss?
Meine Erfahrungen mit TCP sind fast Null.

Danke, Messie

C.Schoch 13. Okt 2011 18:51

AW: [Indy] TCPclient.IOHandler.InputBuffer.Size ist oft 0
 
Hi,

Ich habe diesen Code erfolgreich im Einsatz.

Dieser steht bei mir in einem Timer Event

Delphi-Quellcode:

if FClient.IOHandler <> nil then
begin
   while not FClient.IOHandler.InputBufferIsEmpty do
   begin
     FClient.IOHandler.ReadBytes(FBuffer, FClient.IOHandler.InputBuffer.Size, False);
     // etwas mit FBuffer anstellen
   end;
end;

messie 14. Okt 2011 11:11

AW: [Indy] TCPclient.IOHandler.InputBuffer.Size ist oft 0
 
Moin,

hilft leider bei mir nicht, dann bekomme ich gar keine Daten :cry:

Grüße, Messie

messie 25. Okt 2011 11:09

AW: [Indy] TCPclient.IOHandler.InputBuffer.Size ist oft 0
 
Ich möchte das hier nochmal aufwärmen.:?

Wenn ich tatsächlich keine Daten habe, wartet TIdTCPClient.IOHandler.ReadBytes unendlich bis neue Daten kommen und ein disconnect ist nicht möglich.
Wenn ich nun dem ReadTimeout einen Wert zuweise, wie kann ich erkennen, ob der timeout ausgelöst wurde? Irgendein Fehlerspeicher?

Grüße, Messie


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