Martin schrieb:
> Nun meine Frage wie kann ich mich an das letzte Byte [EndByte]
> Synchronisieren damit ich immer meine 6Byte+[EndByte] auswerten kann?
Dein Problem hat mit C# erstmal gar nichts zu tun.
Du überträgst Daten ohne jegliches Protokoll.
Wozu sendest du ein "Endbyte"?
Du brauchst kein End- sondern ein Startbyte, damit der Empfänger sich
darauf synchronisieren kann. Zuende ist der Datenblock dann, wenn die
vereinbarte Zahl an Daten empfangen wurde. Wie soll sich denn der
Empfänger auf den 1. Block synchronisieren? Da gab es vorher kein
Endbyte.
Aber ein Synchronisationsbyte muss eindeutig sein. Das ist bei binärer
Übertragung aber nicht der Fall. Denn die Daten können jeden Wert von 0
255 annehmen. Und somit auch für ein Sync-Byte gehalten werden.
Deshalb überträgt man die Daten im Ascii-Format. Also aus jedem
Nutzdaten-Byte werden 2 Ascii-Zeichen, die nur die Werte von 0x30-0x39
oder 0x41-0x46 bzw. 0x61-0x66 annehmen können. Alle anderen Werte stehen
dann zur Synchronisation oder für andere Zwecke, z.B. Acknowledge, zur
Verfügung.
Z.B. kann man nach jedem empfangenen Block ein Acknowledge senden, auf
das der Sender wartet, bevor er den nächsten Block sendet. Man kann auch
die Daten noch prüfen und ggf. ein NACK senden, was den Sender den
letzten Block wiederholen lässt.
Das verdoppelt zwar die Menge der zu übertragenden Bytes, also halbiert
den Datendurchsatz, steigert aber die Sicherheit auf 100%.
mfg.