Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#17

AW: Ist der Server zu "schnell"?

  Alt 29. Mär 2011, 23:38
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (30. Mär 2011 um 00:02 Uhr)
  Mit Zitat antworten Zitat