Maison >développement back-end >C++ >Comment éviter « System.Runtime.InteropServices.SafeArrayTypeMismatchException » lors de la désérialisation de structures via TCP ?

Comment éviter « System.Runtime.InteropServices.SafeArrayTypeMismatchException » lors de la désérialisation de structures via TCP ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-03 04:26:39544parcourir

How to Avoid `System.Runtime.InteropServices.SafeArrayTypeMismatchException` When Deserializing Structs Over TCP?

C# Désérialiser une structure après l'avoir reçue via TCP

Lorsqu'ils tentent de transmettre une structure via TCP, les utilisateurs peuvent rencontrer des problèmes de désérialisation. Plus précisément, l'exception « System.Runtime.InteropServices.SafeArrayTypeMismatchException » peut se produire lors de l'exécution du client et du serveur sur des machines distinctes. Ce problème est dû à une mauvaise gestion de la taille et de l'en-tête du paquet.

Préfixage de longueur

Pour résoudre ce problème, un préfixage de longueur approprié doit être implémenté. Cela implique l'ajout d'un en-tête fixe à chaque paquet contenant la longueur des données transmises. Le format de l'en-tête est le suivant :

[Length (4 bytes)][Header (1 byte)][Data (x byte(s))]

Lecture d'un paquet

Pour lire un paquet, les étapes suivantes sont suivies :

  1. Lisez les 4 premiers octets (Longueur), convertissez-les et affectez-les à une variable entière.
  2. Lisez l'octet suivant (les données en-tête) et placez-le dans une variable.
  3. Lisez x octets dans un tableau d'octets (où x est l'entier déclaré à l'étape 1).
  4. Utilisez l'en-tête de données de l'étape 2 pour déterminer l'en-tête de données de l'étape 2. action à entreprendre avec vos données (le 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:
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