NetworkStream.Read - 它可以收集部分消息吗?

时间:2011-04-16 14:45:23

标签: c# network-programming

我正在创建一个客户端 - 服务器应用程序,我只想知道一件事。

客户端将Query对象序列化为String,然后使用NetworkStream将其发送到服务器。

服务器使用GetStream()读取字节。读取,将其写入缓冲区,将该字符串反序列化为Query对象,并获取存储在接收查询中的信息。

Read()方法是否可能返回部分消息(尚未完全到达)? 或者,例如,在立即发送两条消息的情况下,是否可以通过一次调用Read()方法将两条消息作为一个字节串读取?

或者也许NetworkStream知道如何识别完整的消息,每个Read()都与每条消息相关联?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

  

Read()方法是否可能返回部分消息?

是,

如果您看到MSDN Doc,则说明:

  

此方法将数据读入缓冲区参数并返回成功读取的字节数。如果没有可用于读取的数据,则Read方法返回0. Read操作读取尽可能多的数据,直到size参数指定的字节数。如果远程主机关闭连接,并且已收到所有可用数据,则Read方法立即完成并返回零字节。

因此,请始终检查Read()方法的返回(int)值,并查看该方法是否已读取预期的字节数。

<小时/>

  

如果立即发送两条消息,是否可以通过一次Read()方法读取两条消息作为一个字节串?

最可能没有。