C# で TCP 経由で受信した構造体を逆シリアル化する
問題:
シリアル化された構造体を送信するとき、RemuseNetworkPacket、TCP 経由、別個のデシリアライゼーションマシンの結果、SafeArrayTypeMismatchException が発生します。長さプレフィックスの形式は l=xxxx;; で、xxxx はパケット長を表します。
解決策:
この問題は、長さプレフィックスが文字列として処理されることで発生します。整数の代わりに。長さプレフィックスは正しく実装する必要があります:
-
パケット長をバイトに変換: パケット データの長さ (長さプレフィックスとヘッダーは含まない) をバイト配列に変換します。通常、この結果は 4 バイトになります。
-
長さのプレフィックスとヘッダーを追加します。 長さのバイト配列をパケット データ ヘッダーおよび実際のパケット データと連結します。
-
パケット構造: 結果のパケット構造は次のようになります: [長さ (4 バイト)][ヘッダー (1 バイト)][データ(x バイト)].
受信と逆シリアル化:
-
読み取り長: 最初の 4 を読み取りバイト (長さ) を取得し、それらをinteger.
-
ヘッダーの読み取り: 次のバイト (ヘッダー) の読み取り。
-
データの読み取り: x バイトの読み取り (x は取得した長さ)ステップ 1) でバイト配列に変換します。
-
Deserialize packet: ステップ 2 のヘッダーを使用して適切な逆シリアル化方法を決定し、それをステップ 3 のバイト配列に適用します。
以上がC# で TCP 経由で受信した構造体を正しく逆シリアル化し、SafeArrayTypeMismatchException を回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。