Und genau hier liegt der Fehler
ReceiveLength sagt dir wieviel empfangen wurde!
Wenn das die Daten sind die zum Socket unterwegs sind (i = Integer-Header, d = Daten)
Code:
iiiiddddddddddddddddddddddddddddiiiiddddddddddiiiidddddddddd
Dann wird jedes Mal, wenn etwas empfangen wird, das Event aufgerufen.
Nun kann es eben auch passieren, dass eben immer nur ein Teil der Daten ankommt.
Code:
1 ii
2 iiiidddddddddddddd
3 ddddddddddddddddddddddddddddiiiiddddddddddiiiidddddddddd
Zum Zeitpunkt 1 ist ReceiveLength 2 und somit kleiner als SizeOf( Integer ) - warten
Zum Zeitpunkt 2 ist ReceiveLength 18, jetzt lesen wir vom Buffer den Integer-Wert aus
Der Buffer wird beim Lesen automatisch um die gelesenen Bytes verkleinert.
Jetzt muss man abwarten, bis der Buffer mindestens soviel Bytes enthält, wie der Integer-Wert angekündigt hat und wir können die komplette Nachricht vom Buffer lesen.