Problem ist einfach, dass er nicht den Rückgabewert von ReceiveNetworkData berücksichtigt, wie ich schon mehrfach darauf hingewiesen habe.
Code: Alles auswählen
Case #PB_NetworkEvent_Data
If eins = 0 ;*
ReceiveNetworkData(EventClient(), @eins, 4)
EndIf ;*
Wenn im Empfangsbuffer noch keine 4 Bytes vorhanden sind, sondern z.B. nur 2 Bytes, werden 2 Bytes in die Long-Variable gespeichert und die If-Bedingung schlägt fehl, weil das Long noch nicht vollständig ist (Long = 4 Bytes) und der Wert somit nicht die gewünschte "1" entspricht.
In dem Fall wird die If-Bedingung nach dem nächsten Datenempfang wieder ausgeführt und versucht wieder 4 Bytes aus dem Empfangsbuffer auszulesen. Wir haben diesmal Glück - 4 Bytes sind vorhanden und werden ausgelesen. Der Long-Wert den wir erhalten ist jedoch ein anderer als den wir gesendet haben. Warum? Beim ersten Mal als wir den Empfangsbuffer ausgelesen haben, erhielten wir nur 2 Bytes. Diese haben wir nicht zwischengespeichert und sind somit verloren gegangen. Beim zweiten Mal haben wir also die letzten 2 Bytes des eins-Longs und die ersten 2 Bytes des zwei-Longs aus dem Empfangsbuffer geholt.
Kleine Veranschaulichung:
[xx][xx] entsprechen den zwei Words (2 Bytes) der Long (4 Bytes)
1. Senden: [11][22] = eins-Long
2. Senden: [33][44] = zwei-Long
1. Empfangen: eins-Long = [11] => Es waren leider nur 2 Bytes der 4 Bytes im Empfangsbuffer
2. Empfangen: eins-Long = [22][33] => Diesmal sind 4 Bytes im Empfangsbuffer
Normalerweise sollte eins-Long ja [11][22] sein. Es kamen aber nur 2 Bytes des eins-Longs beim ersten Empfang an. Diese wurden aber nicht zwischengespeichert und gingen verloren, somit haben sich die ganzen Daten verschoben und können den Longs nicht mehr richtig zugeordnet werden.
Vielleicht ist es nun klarer.