0

我正在通过套接字发送消息。在客户端,我正在使用 StringBuilder 组装消息

StringBuilder sb = new StringBuilder(message);
sb.Insert(0, (char)11);
sb.Append((char)28);
sb.Append((char)13);

从客户端发送到服务器

Byte[] data = new Byte[1024];
data = Encoding.ASCII.GetBytes(message.ToString());
NetworkStream stream = client.GetStream();
stream.Write(data, 0, data.Length);

服务器端

StringBuilder message = new StringBuilder(Encoding.ASCII.GetString(bytesReceived, 0, bytesReceived.Length));

然后我想检查我的消息是否包含在正确的容器中,但由于某种原因,检查中的最后 2 个字符等于 0,而不是正确的 28 和 13。

if (((int)messsage[message.Length - 2] == 28) && ((int)message[message.Length - 1] == 13))

提前感谢您的帮助

添加了要求的数据

byte[] bytes = new byte[1024];
NetworkStream stream = tcpClient.GetStream();
stream.Read(bytes, 0, bytes.Length);
4

1 回答 1

2

Stream.Read最多读取bytes.Length字节,它的返回值会告诉你它实际读取了多少字节。

如果这还不够,那么您将需要Stream.Read()再次致电。

此外,bytes.Length将始终返回数组的长度,而不是读取的字节数。

查看您的发送代码,您可能希望尽可能多地从流中读取,将读取的内容附加到字符串生成器,然后检查最后 2 个字符是否为 28 和 13,如果是,那么您有你的完整信息。

于 2013-03-26T00:17:30.987 回答