作为'协议'的一部分,我有一个Enum
,它在客户端和服务器之间共享,它决定了如何处理其余的数据
客户端:
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)大不相同
我确定我做了一些非常错误的事情,与字节数组拆分有关,但我不能为我的生活看到什么
有什么想法吗?
(一如既往,如果有比上述更好的实施方法,我愿意接受建议:))
答案 0 :(得分:1)
byte[] outStream = Encoding.UTF8.GetBytes((int)Shared.CommandType.ClientJoin + "sometext");
变为
byte[] outStream = Encoding.UTF8.GetBytes(0+ "sometext");
byte[] outStream = Encoding.UTF8.GetBytes("0sometext");
收到commandBytes
后,其字节代表为{'0','s','o','m'}
和BitConverter.ToInt32(commandBytes, 0);
将只生成一个4字节数组的整数表示,其所有成员都具有非零值(因为所有成员都是ascii文本)。