Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: ReceiveBuf empfängt 2 Pakete mit einmal! Wie verhinderen

  Alt 29. Sep 2004, 17:58
Zitat von DracoBlue:
Wenn ich beispielsweise 2 Nachrichten hintereinander verschicke.

Code:
Socket.SendBuf(variabl1e5); // Variable ist 5 Byte groß
Socket.SendBuf(variabl1e4); // Variable ist 4 Byte groß
Und dann bei OnRead dieses beim Server mache
Code:
showmessage(inttostr(Socket.ReceiveLength)); // Wieviel kommt an?
--> Mal wird die aktion 2x ausgeführt, mit ergebnis : 5 und 4
---> Mal wird sie aber nur 1x ausgeführt mit ergebnis : 9

Kann ich irgendwie dafür sorgen, dass die Datenpakete immer einzeln ankommen?
Nein, an dem Verhalten lässt sich nichts ändern. TCP Daten werden zwar als Pakete verschickt, können aber unterwegs in kleinere Bruchstücke zerhackt werden (oder kleine Datenpakete kommen als ein Packt an).
Am Ende hast du einfach einen logischen Datenstrom. Du musst den Datenstrom inhaltlich strukturieren, damit du am Ende noch weisst, welche Kleinpakete du am Anfang reingestopft hast.
Du könntest z.B. jedes Kleinpaket mit einem Steuerzeichen (EOD) abschliesen.
Oder du verwendest eine Art Tagged Format mit folgendem Aufbau:
  • 4 Byte Kennung
  • 4 Byte Nutzdatenlänge
  • x Bytes Nutzdaten
Andreas
  Mit Zitat antworten Zitat