Heim > Backend-Entwicklung > C++ > Wie deserialisiere ich zuverlässig eine Struktur aus einem TCP-Stream mit Längenpräfix?

Wie deserialisiere ich zuverlässig eine Struktur aus einem TCP-Stream mit Längenpräfix?

DDD
Freigeben: 2025-01-03 07:08:40
Original
548 Leute haben es durchsucht

How to Reliably Deserialize a Struct from a Length-Prefixed TCP Stream?

Struktur vom TCP-Empfang nach Längenpräfix deserialisieren

Problem:

Beim Deserialisieren eines Benutzers Wenn die Struktur über TCP von einem separaten Computer empfangen wird, ist eine Ausnahme aufgetreten: „System.Runtime.InteropServices.SafeArrayTypeMismatchException“.

Ursprüngliche Implementierung:

Die Struktur enthält Serialisierungsmethoden zum Vorbereiten und Abrufen von Daten vor und nach dem Senden. Den gesendeten Bytes wird ein Header im Format „l=xxxx;“ hinzugefügt, um die Größe der eingehenden Daten anzugeben. Das empfangende Ende sucht nach diesem Header, extrahiert die Paketbytes und versucht, sie zu deserialisieren.

Ausnahmeursache:

Die Hauptursache liegt in der Abhängigkeit von a Zeichenfolge zur Bestimmung der Paketlänge. Dieser Ansatz kann zu Inkonsistenzen bei der Datenübertragung über das Netzwerk führen.

Lösung:

Längenpräfixierung implementieren:

Anstatt eine Header-Zeichenfolge zu verwenden, implementieren Sie die richtige Längenpräfixierung. Dabei wird jedem gesendeten „Paket“ ein fester Header hinzugefügt, der die Länge der Daten angibt. Diese Länge wird in Bytes umgewandelt, was 4 Bytes ergibt. Anschließend werden der Datenheader und das Paket selbst angehängt.

Paketstruktur:

[Länge (4 Bytes)][Header (1 Byte)][Daten (x Byte(s)]

Paketempfang und Parsen:

  1. Lesen Sie die ersten 4 Bytes (Länge), konvertieren Sie sie und weisen Sie sie einer Ganzzahlvariablen zu.
  2. Lesen Sie das nächste Byte (Datenkopf) und speichern Sie es in eine Variable.
  3. Lesen Sie x Bytes in ein Byte-Array, wobei x die Ganzzahl aus Schritt 1 ist.
  4. Verwenden Sie die Datenkopf aus Schritt 2, um zu bestimmen, was mit den Daten geschehen soll.

Das obige ist der detaillierte Inhalt vonWie deserialisiere ich zuverlässig eine Struktur aus einem TCP-Stream mit Längenpräfix?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage