背景: 最近寫了一個C/S架構的 C# Socket 通訊項目,服務端,客戶端弄通了之後,客戶端發送給服務端後,服務端回覆一個字元串告訴客戶端確認收到了。問題就在這。 問題: 一開始,我讓服務端回覆了一個拉阿伯數字9,客戶端通過byte(一個位元組)數組接收後轉換成UTF8的string字元串,和客戶 ...
背景:
最近寫了一個C/S架構的 C# Socket 通訊項目,服務端,客戶端弄通了之後,客戶端發送給服務端後,服務端回覆一個字元串告訴客戶端確認收到了。問題就在這。
問題:
一開始,我讓服務端回覆了一個拉阿伯數字9,客戶端通過byte(一個位元組)數組接收後轉換成UTF8的string字元串,和客戶端聲明的字元串“9”對比,然後寫入日誌的時候,發現都正常發送了,但是日誌記錄的全是失敗,就意味著對比的時候全是false,我就鬱悶了,查了查資料,有的說是編碼問題,我於是把客戶端聲明的字元串也轉成了UTF8的字元串,但是對比還是false,debug追蹤下來,兩個字元串全是“9”,沒發現什麼不一樣,然而對比結果就是false。對比byte也是false。後來把“9”改成了字母“a”,結果就正確了。由於本人是Java開發,C#才剛練手不久,也沒弄懂,在此記錄一下,希望大神能給指點一下。
代碼如下:
//接收服務端消息,確認發送成功 byte[] result = new byte[1]; string str = "a"; byte[] rstr = Encoding.UTF8.GetBytes(str); string newStr = Encoding.UTF8.GetString(rstr,0,str.Length).ToString().Trim(); int reStr = PDASocket.Receive(result); string stringRtn = Encoding.UTF8.GetString(result, 0, result.Length).ToString().Trim(); if (!string.IsNullOrEmpty(stringRtn)) { label19.Text = stringRtn; } if (stringRtn == newStr) { sendLog = "發送成功"; } else { sendLog = "發送失敗"; }