![]() |
IdTCPClient ReadBytes
Guten Abend, wieder habe ich eine Frage.
Ich sende via IdTCPClient.IOHandler.Write() ein Paket an einen Server. Direkt danach erwarte ich eine Antwort vom Server. Doch wie lese ich die Antwort jetzt? Ich habe es mit IdTCPClient.IOHandler.ReadBytes() versucht, aber bekomme dann nichts gescheites raus. Hier mal ein wenig Code:
Delphi-Quellcode:
var bytes: TIdBytes;
Delphi-Quellcode:
Hier ergeben sich aber jetzt mehrere Probleme.
IdTCPClient1.IOHandler.ReadBytes(bytes, 16);
for i := Low(bytes) to High(bytes) do resp := resp + chr(bytes[i]); //resp := BytesToString(bytes, 8); showmessage(resp); 1. Ich erhalte immer eine leere Messagebox. 2. Ist wenn ich das richtig verstanden habe die Antwort nun auf 9 Zeichen begrenzt (0...8). Da ich aber nicht weiß, wie lang die Antwort ist, ist diese Lösung nicht wirklich zufriedenstellend. Was also tun? |
AW: IdTCPClient ReadBytes
schick doch einen stream
dann ist die länge auch bekannt wenn die intern vor dem stream als int mitgeschickt wird |
AW: IdTCPClient ReadBytes
Das Problem ist, dass die Antwort von einem fremden Server kommt und ich keinen Einfluss darauf habe.
Somit könnte ich zwar die Länge mit senden, würde aber keine bei der Antwort bekommen. |
AW: IdTCPClient ReadBytes
naja, irgendwas muss es geben
es gibt 3 möglichkeiten bei datenübertragung mit tcp/udp 1. es ist auf beiden seiten bekannt, wie groß das paket ist - es wird auf empfängerseite genau X bytes gelesen vom buffer 2. es werden terminierte byteketten verschickt, womit auf empfängerseite erkannt werden kann, wann aufgehört werden kann mit lesen aus dem buffer (bei writeln z.b.) 3. es wird die länge des konstrukts vor den eigentlichen daten mitgeschickt - die länge ist auch in einem definierten format (hat auch eine länge) z.b. int oder int64 usw.. wenn keines der drei möglichkeiten bei deiner gegenstelle vorhanden sind, sehe ich schwarz schau dir doch mal die pakete mit wireshark an und achte auf abschlusszeichen oderso bzw nullzeichen, auffüllzeichen (falls feste paketgröße) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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