Maison > développement back-end > C++ > Comment désérialiser correctement une structure reçue via TCP en C# et éviter SafeArrayTypeMismatchException ?

Comment désérialiser correctement une structure reçue via TCP en C# et éviter SafeArrayTypeMismatchException ?

Patricia Arquette
Libérer: 2024-12-31 03:41:13
original
342 Les gens l'ont consulté

How to Correctly Deserialize a Struct Received Over TCP in C# and Avoid SafeArrayTypeMismatchException?

Désérialisation de la structure reçue via TCP en C#

Problème :

Lors de l'envoi d'une structure sérialisée , RemuseNetworkPacket, sur TCP, la désérialisation sur une machine distincte entraîne un SafeArrayTypeMismatchException. Le format du préfixe de longueur est l=xxxx;;, où xxxx représente la longueur du paquet.

Solution :

Le problème vient du fait que le préfixe de longueur est traité comme une chaîne au lieu d'un entier. Le préfixe de longueur doit être implémenté correctement :

  1. Convertir la longueur du paquet en octets : Convertir la longueur des données du paquet (sans compter le préfixe de longueur et l'en-tête) en un tableau d'octets. Cela donnera généralement 4 octets.
  2. Ajoutez un préfixe de longueur et un en-tête : Concaténez le tableau d'octets de longueur avec l'en-tête des données du paquet et les données réelles du paquet.
  3. Structure du paquet : La structure du paquet résultante doit être : [Longueur (4 octets)][En-tête (1 octet)][Données (x octet(s))].

Réception et désérialisation :

  1. Longueur de lecture : Lire les 4 premiers octets ( longueur) et convertissez-les en nombre entier.
  2. Lire l'en-tête : Lisez le octet suivant (en-tête).
  3. Lire les données : Lire x octets (où x est la longueur obtenue à l'étape 1) dans un tableau d'octets.
  4. Désérialiser packet : Utilisez l'en-tête de l'étape 2 pour déterminer la méthode de désérialisation appropriée et appliquez-la au tableau d'octets de l'étape 3.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal