Frage

Verdreht, wenn die DataReceived Verfahren implementiert, scheint es keine Beispiele zu sein, das ist fragmentiert beziehen sich auf die Pakete. In jeder anderen Sprache ist dies etwas, das Sie manuell implementieren, so frage mich, ich nur, wenn dies für Sie in verdrehten schon oder was getan wird? Wenn ja, muss ich meine Pakete mit einer Länge Header voranstellen? Oder muss ich dies manuell tun? Wenn ja, welche Art und Weise wäre das?

War es hilfreich?

Lösung

In der DataReceived Methode erhalten Sie die Daten als eine Reihe von unbestimmter Länge Bedeutung zurück, dass es eine ganze Nachricht in Ihrem Protokoll sein kann, oder es kann nur ein Teil der Nachricht, die einige ‚Kunden‘ an Sie gesendet. Sie werden um die Daten zu überprüfen, um zu sehen, ob es eine ganze Nachricht in Ihrem Protokoll umfasst.

Ich bin derzeit mit Verdrehte auf einem meiner Projekte, ein Protokoll zu implementieren und beschlossen, die Struktur-Modul zu verwenden, um meine Daten zu packen / entpacken. Das Protokoll ich Umsetzung bin eine feste Header-Größe, damit ich konstruieren keine Nachrichten, bis ich mindestens header_size Menge der gelesenen Bytes. Die Gesamtgröße der Nachricht wird in diesem Header Datenbereich deklariert.

Ich denke, Sie nicht wirklich brauchen eine Nachrichtenlänge als Teil des Protokolls zu definieren, aber es hilft. Wenn Sie nicht ein definiert haben würden Sie haben ein spezielles Trennzeichen haben, der bestimmt, wann eine Nachricht / beginnt endet. Eine Art, wie das FIX-Protokoll verwendet die SOH-Byte-Felder zu begrenzen. Obwohl es ein erforderliches Feld hat, der Ihnen sagt, wie lange eine Nachricht ist (nur nicht, wie viele Felder in einer Nachricht sind).

Andere Tipps

Wenn Sie mit TCP tun haben, sollten Sie wirklich alle Vorstellung von ‚Paketen‘ vergessen. TCP ist ein Stream-Protokoll - Sie Stream-Daten in und Daten auf die andere Seite ausströmt. Sobald die Daten gesendet wird, ist es erlaubt, so viele oder so wenige Blöcke kommen in, wie es will, solange die Daten alle in der richtigen Reihenfolge ankommt. Sie werden von Hand haben, um die Abgrenzung zu tun als mit anderen Sprachen, mit einem Längenfeld oder ein Nachrichtentypfeld, oder einem speziellen Trennzeichen, etc.

Sie können auch ein LineReceiver Protokoll

verwenden
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top