首頁 >後端開發 >C++ >如何在 C# 中正確反序列化透過 TCP 接收的結構並避免 SafeArrayTypeMismatchException?

如何在 C# 中正確反序列化透過 TCP 接收的結構並避免 SafeArrayTypeMismatchException?

Patricia Arquette
Patricia Arquette原創
2024-12-31 03:41:13355瀏覽

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

在C# 中反序列化透過TCP 接收的結構

問題:

問題:

問題:

  1. 問題:
  2. 問題:
  3. 發送>序列化結構時,RemuseNetworkPacket,透過TCP,在單獨的反序列化機器會導致SafeArrayTypeMismatchException。長度前綴格式為l=xxxx;;,其中xxxx代表封包長度。
  4. 解:

問題是由於長度前綴被作為字串處理而產生的而不是整數。應正確實現長度前綴:

    將封包長度轉換為位元組:
  1. 將封包資料的長度(不包括長度前綴和標頭)轉換為位元組數組。這通常會產生 4 個位元組。
  2. 加上長度前綴和標頭:
  3. 將長度位元組陣列與封包資料標頭和實際封包資料連接起來。
  4. 封包結構:
  5. 產生的封包結構應為:[長度(4 位元組)][標頭(1 位元組)][資料(x byte(s))].
  6. 接收並反序列化:
讀取長度:讀取前4 個位元組(長度)並將它們轉換為整數。 讀取header:讀取下一個位元組(header)。 讀取資料:讀取x個位元組(其中x是步驟1中獲得的長度)到位元組數組中。 反序列化資料包: 使用步驟 2 中的標頭確定適當的反序列化方法並將其應用於位元組數組從第 3 步開始。

以上是如何在 C# 中正確反序列化透過 TCP 接收的結構並避免 SafeArrayTypeMismatchException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn