Deserialisieren einer über TCP in C# empfangenen Struktur
Problem:
Beim Senden einer serialisierten Struktur , RemuseNetworkPacket, über TCP führt die Deserialisierung auf einem separaten Computer zu einer SafeArrayTypeMismatchException. Das Längenpräfixformat ist l=xxxx;;, wobei xxxx die Paketlänge darstellt.
Lösung:
Das Problem entsteht dadurch, dass das Längenpräfix als Zeichenfolge behandelt wird anstelle einer ganzen Zahl. Das Längenpräfix sollte korrekt implementiert sein:
-
Paketlänge in Bytes konvertieren:Konvertieren Sie die Länge der Paketdaten (ohne Längenpräfix und Header) in ein Byte-Array. Dies führt normalerweise zu 4 Bytes.
-
Längenpräfix und Header hinzufügen: Verketten Sie das Längenbyte-Array mit dem Paketdaten-Header und den tatsächlichen Paketdaten.
-
Paketstruktur: Die resultierende Paketstruktur sollte sein: [Länge (4 Bytes)][Header (1 Byte)][Daten (x Byte(s)).
Empfangen und Deserialisieren:
-
Leselänge: Die ersten 4 Bytes lesen ( Länge) und konvertieren Sie sie in eine ganze Zahl.
-
Kopfzeile lesen:Weiter lesen Byte (Header).
-
Daten lesen:X Bytes (wobei x die in Schritt 1 erhaltene Länge ist) in ein Byte-Array lesen.
-
Paket deserialisieren : Verwenden Sie den Header aus Schritt 2, um die geeignete Deserialisierungsmethode zu bestimmen und sie auf das Byte-Array aus Schritt anzuwenden 3.
Das obige ist der detaillierte Inhalt vonWie deserialisiere ich eine über TCP in C# empfangene Struktur korrekt und vermeide SafeArrayTypeMismatchException?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!