背景:
最近寫了一個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 = "發送失敗"; }