我正在创建一个客户端 - 服务器应用程序,我只想知道一件事。
客户端将Query对象序列化为String,然后使用NetworkStream将其发送到服务器。
服务器使用GetStream()读取字节。读取,将其写入缓冲区,将该字符串反序列化为Query对象,并获取存储在接收查询中的信息。
Read()方法是否可能返回部分消息(尚未完全到达)? 或者,例如,在立即发送两条消息的情况下,是否可以通过一次调用Read()方法将两条消息作为一个字节串读取?
或者也许NetworkStream知道如何识别完整的消息,每个Read()都与每条消息相关联?
提前谢谢。
答案 0 :(得分:1)
Read()方法是否可能返回部分消息?
是,
如果您看到MSDN Doc,则说明:
此方法将数据读入缓冲区参数并返回成功读取的字节数。如果没有可用于读取的数据,则Read方法返回0. Read操作读取尽可能多的数据,直到size参数指定的字节数。如果远程主机关闭连接,并且已收到所有可用数据,则Read方法立即完成并返回零字节。
因此,请始终检查Read()
方法的返回(int)值,并查看该方法是否已读取预期的字节数。
如果立即发送两条消息,是否可以通过一次Read()方法读取两条消息作为一个字节串?
最可能没有。