丢失字符串中的字符串

时间:2013-03-25 23:34:35

标签: c# sockets tcp tcplistener

我正在通过套接字发送消息。 在客户端,我正在使用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);

1 个答案:

答案 0 :(得分:2)

Stream.Read将读取最多bytes.Length个字节,它的返回值将告诉您实际读取的字节数。

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

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

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