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