發送枚舉值作爲「協議」我有一個Enum
,後者是在客戶端和服務器共享的,這就決定如何處理該數據的其餘部分做的一部分經由TCP
客戶:
byte[] outStream = Encoding.UTF8.GetBytes((int)Shared.CommandType.ClientJoin + "sometext");
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();
,並在服務器端:
string dataFromClient = null;
byte[] bytesFrom = new byte[1024];
NetworkStream networkStream = tcpclient.GetStream();
int bytesread = networkStream.Read(bytesFrom, 0, bytesFrom.Length);
Byte[] commandBytes = new Byte[4];
Array.Copy(bytesFrom, commandBytes, 4);
dataFromClient = Encoding.UTF8.GetString(bytesFrom, 4, bytesread - 4);
//test values
int receivedcommand = BitConverter.ToInt32(commandBytes, 0);
int actualcommand = (int)Shared.CommandType.ClientJoin;
然而,所接收到的 '價值'(1634222896中測試)是與實際值完全不同的(0)
我敢肯定我正在做一些非常錯誤的事情,與字節數組分裂有關,但我不能爲我的生活看到什麼
任何想法?
(一如既往,如果有執行比上面一個更好的方法,我很願意聽取建議:))
您發送的枚舉是十進制字符串,而不是4個字節。 – harold
如果適用,您是否考慮過使用諸如soap或RESTful API之類的東西來實現此目的?通過這種方式,您可以在一端序列化對象,而在另一端則反序列化,而不需要太多的努力。 – series0ne
哈羅德是正確的。剛剛檢查。嘗試檢查byte [] outStream = Encoding.UTF8.GetBytes(1234567890 +「」)的長度,以查看我的意思。 – Patrik