通过TCP发送枚举值

时间:2012-08-28 15:04:19

标签: c# tcp enums bytearray byte

作为'协议'的一部分,我有一个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)大不相同

我确定我做了一些非常错误的事情,与字节数组拆分有关,但我不能为我的生活看到什么

有什么想法吗?

(一如既往,如果有比上述更好的实施方法,我愿意接受建议:))

1 个答案:

答案 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文本)。