1

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

我确定我做错了什么,与字节数组拆分有关,但我一生都看不到什么

有任何想法吗?

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

4

1 回答 1

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

于 2012-08-28T15:19:17.753 回答