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 :
-
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.
-
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.
-
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 :
-
Longueur de lecture : Lire les 4 premiers octets ( longueur) et convertissez-les en nombre entier.
-
Lire l'en-tête : Lisez le octet suivant (en-tête).
-
Lire les données : Lire x octets (où x est la longueur obtenue à l'étape 1) dans un tableau d'octets.
-
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!