AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

IdTCPClient ReadBytes

Ein Thema von SyntaxXx · begonnen am 28. Aug 2013 · letzter Beitrag vom 30. Aug 2013
Antwort Antwort
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#1

IdTCPClient ReadBytes

  Alt 28. Aug 2013, 19:52
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:

var bytes: TIdBytes;
Delphi-Quellcode:
  IdTCPClient1.IOHandler.ReadBytes(bytes, 16);

  for i := Low(bytes) to High(bytes) do
    resp := resp + chr(bytes[i]);

  //resp := BytesToString(bytes, 8);
  showmessage(resp);
Hier ergeben sich aber jetzt mehrere Probleme.
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?
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#2

AW: IdTCPClient ReadBytes

  Alt 29. Aug 2013, 08:45
schick doch einen stream
dann ist die länge auch bekannt wenn die intern vor dem stream als int mitgeschickt wird
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#3

AW: IdTCPClient ReadBytes

  Alt 30. Aug 2013, 07:15
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.
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#4

AW: IdTCPClient ReadBytes

  Alt 30. Aug 2013, 08:25
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)
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 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