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
362 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!

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