1. 程式人生 > >專案開發中遇到的一些問題--組播相關(接收資料出現\0)

專案開發中遇到的一些問題--組播相關(接收資料出現\0)

當我們使用原生socket進行組播接收時獲取的byte[]定義了長度 但是組播發送方傳送的資料可能不足這個長度 這時byte[]中不足部分會填入0 當直接GetString時會在正常字串後面出現\0 

處理方法:

1)直接replace或者trim或者endtrim       這種方法不推薦 規範的C語言會以第一個\0作為字串的截斷字元 如果是規範的可以用 但是如果傳送方不是你做的 無法保證規範性 容易截錯

2)使用GetString  正常情況下,一個二進位制協議中會有一個欄位來說明byte[]中有效字元到底是多少個。 這時可以用GetString(byte[],0,count)進行獲取

byte[]和string的轉換應該按照有依據的原理來準確識別出真實的不冗餘的資料。而不是自己隨便 Replace 或者 Trim

byte[] b = new byte[112];
int count = s.ReceiveFrom(b, ref ep);
string test = UTF8Encoding.UTF8.GetString(b, 0, count);