在C# 中反序列化透過TCP 接收的結構
問題:
問題:
問題:
- 問題:
- 問題:
發送>序列化結構時,RemuseNetworkPacket,透過TCP,在單獨的反序列化機器會導致SafeArrayTypeMismatchException。長度前綴格式為l=xxxx;;,其中xxxx代表封包長度。 -
解:
問題是由於長度前綴被作為字串處理而產生的而不是整數。應正確實現長度前綴:
將封包長度轉換為位元組:- 將封包資料的長度(不包括長度前綴和標頭)轉換為位元組數組。這通常會產生 4 個位元組。
加上長度前綴和標頭:- 將長度位元組陣列與封包資料標頭和實際封包資料連接起來。
封包結構:- 產生的封包結構應為:[長度(4 位元組)][標頭(1 位元組)][資料(x byte(s))].
- 接收並反序列化:
讀取長度:讀取前4 個位元組(長度)並將它們轉換為整數。 讀取header:讀取下一個位元組(header)。 讀取資料:讀取x個位元組(其中x是步驟1中獲得的長度)到位元組數組中。 反序列化資料包: 使用步驟 2 中的標頭確定適當的反序列化方法並將其應用於位元組數組從第 3 步開始。
以上是如何在 C# 中正確反序列化透過 TCP 接收的結構並避免 SafeArrayTypeMismatchException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!