Du hast das Wichtigste vernachlässigt.
Du hast kein oder nur ein ungenügendes Protokoll.
Ein Protokoll muss auf jeden Fall 2 Dinge gewährleisten:
* Der Empfänger muss eindeutig bestimmen können, wann ein Datensatz
anfängt
* und er muss eindeutig bestimmen können, wann ein Datensatz zu Ende
ist.
Nur so gelingt es dir, dass sich ein Empfänger in einen laufenden
Datenstrom einklinken kann und sich nach kurzer Zeit mit dem Sender
synchronisieren kann.
Bsp
Dein Protokoll sehe zb so aus:
Erstes Zeichen eines Datensatzes (es wird ASCII übertragen) ist immer
ein 'I' wie Index. Darauf folgt die Indexnummer, gefolgt von einem 'W'
(wie Wert) und dem Zahlenwert.
Damit schaffst du es schon mal dich in den Datenstrom
67I5W874I9W-321I2W23
einzuklinken und daraus die Datensätze
I 5 W 874 Setze Index 5 auf 874
I 9 W -321 Setze Index 9 auf -321
zu extrahieren.
die 67 vor dem ersten I werden ignoriert. Der Empfänger hat sich mitten
in eine Übertragung eingeklingt und kann damit nichts anfangen. Für ihn
beginnt die Übertragung erst mit dem ersten Zeichen welches ihm
zweifelsfrei sagt, wo ein Datensatz anfängt
Was ist mit dem I2W23 welches noch kommt? Der Empfänger kann damit noch
nichts anfangen. Erst wenn ein nächstes I kommen würde, wüsste er
zweifelsfrei dass dieser Datensatz abgeschlossen ist. Anstatt dem I
könnte ja auch noch eine 8 kommen und der Datensatz damit
I 2 W 238
lauten. Und nach der 8 könnte noch eine 5 kommen und den Datensatz so zu
I 2 W 2385 aufbohren.
-> Eine Endekennung muss her, damit der Empfänger auch zweifelsfrei
weiß, wann ein Datensatz tatsächlich zu Ende ist. Selbst dann wenn der
Sender nichts mehr hinten nach sendet.
Du könntest zb vereinbaren, dass jeder Datensatz immer mit einem ;
abgeschlossen wird.
67;I5W874;I9W-321;I2W23;
jetzt ist alles klar. In diesem Datenstrom sind die Datensätze
I 5 W 874
I 9 W -321
I 2 W 23
zweifelsfrei identifizierbar.
Den HäckMäck mit Daten hin und zurück schicken hingegen kannst du dir
sparen. Das bringt nichts. Wenn du willst, dann mach eine Prüfsumme über
die Index und Werte und schicke die noch hinten nach. Der Empfänger
berechnet ebenfalls die Prüfsumme über das was er empfangen hat und
vergleicht sie mit der empfangenen. Stimmen sie nicht überein, dann ist
ein Übertragungsfehler passiert. Wenn die Prüfsummen übereinstimmen,
heißt das zwar nicht automatisch, daß es keinen Übertragungsfehler gab,
aber der Fall ist eher unwahrscheinlich.