Désérialiser la structure à partir de la réception TCP après le préfixage de la longueur
Problème :
Lors de la désérialisation d'un message personnalisé struct reçue via TCP depuis une machine distincte, une exception est rencontrée : "System.Runtime.InteropServices.SafeArrayTypeMismatchException".
Implémentation originale :
La structure inclut des méthodes de sérialisation pour préparer et récupérer les données avant et après l'envoi. Un en-tête est ajouté aux octets envoyés pour indiquer la taille des données entrantes, au format "l=xxxx;". L'extrémité réceptrice recherche cet en-tête, extrait les octets du paquet et tente de les désérialiser.
Cause d'exception :
La cause fondamentale réside dans le recours à un chaîne pour la détermination de la longueur des paquets. Cette approche peut entraîner des incohérences lors du transfert de données sur le réseau.
Solution :
Implémenter le préfixage de la longueur :
Au lieu d'utiliser une chaîne d'en-tête, implémentez un préfixe de longueur approprié. Cela implique d'ajouter un en-tête fixe à chaque « paquet » envoyé, représentant la longueur des données. Cette longueur est convertie en octets, ce qui donne 4 octets. L'en-tête de données et le paquet lui-même sont ensuite ajoutés.
Structure du paquet :
[Longueur (4 octets)][En-tête (1 octet)][Données (x octet(s))]
Réception des paquets et Analyse :
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!