ホームページ > バックエンド開発 > C++ > C# で TCP 経由で受信した構造体を正しく逆シリアル化し、SafeArrayTypeMismatchException を回避する方法

C# で TCP 経由で受信した構造体を正しく逆シリアル化し、SafeArrayTypeMismatchException を回避する方法

Patricia Arquette
リリース: 2024-12-31 03:41:13
オリジナル
342 人が閲覧しました

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

C# で TCP 経由で受信した構造体を逆シリアル化する

問題:

シリアル化された構造体を送信するとき、RemuseNetworkPacket、TCP 経由、別個のデシリアライゼーションマシンの結果、SafeArrayTypeMismatchException が発生します。長さプレフィックスの形式は l=xxxx;; で、xxxx はパケット長を表します。

解決策:

この問題は、長さプレフィックスが文字列として処理されることで発生します。整数の代わりに。長さプレフィックスは正しく実装する必要があります:

  1. パケット長をバイトに変換: パケット データの長さ (長さプレフィックスとヘッダーは含まない) をバイト配列に変換します。通常、この結果は 4 バイトになります。
  2. 長さのプレフィックスとヘッダーを追加します。 長さのバイト配列をパケット データ ヘッダーおよび実際のパケット データと連結します。
  3. パケット構造: 結果のパケット構造は次のようになります: [長さ (4 バイト)][ヘッダー (1 バイト)][データ(x バイト)].

受信と逆シリアル化:

  1. 読み取り長: 最初の 4 を読み取りバイト (長さ) を取得し、それらをinteger.
  2. ヘッダーの読み取り: 次のバイト (ヘッダー) の読み取り。
  3. データの読み取り: x バイトの読み取り (x は取得した長さ)ステップ 1) でバイト配列に変換します。
  4. Deserialize packet: ステップ 2 のヘッダーを使用して適切な逆シリアル化方法を決定し、それをステップ 3 のバイト配列に適用します。

以上がC# で TCP 経由で受信した構造体を正しく逆シリアル化し、SafeArrayTypeMismatchException を回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート