[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:
Was passiert da? Gibt es irgendwelche Startsequenzen o.ä, die ich vorher ausführen muss?
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); Meine Erfahrungen mit TCP sind fast Null. Danke, Messie |
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; |
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 |
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