【发布时间】:2017-08-26 02:17:59
【问题描述】:
假设我通过 TCP 实现了简单的协议,其中每条消息由以下部分组成:
-
int表示数据长度。 - 二进制数据,长度在 1 中指定。
读到这样的消息,我想:
int length = input.ReadInt();
byte[] data = input.ReadBytes(length);
使用Socket.Receive 或NetworkStream.Read 读取可用的字节数。我希望阻止对ReadBytes 的调用,直到length 字节可用。
有没有一种简单的方法可以做到这一点,而不必循环读取,在偏移处重新开始等待剩余数据?
在实际应用程序中,读取可能应该在异步或后台线程上完成,但我暂时忽略了这一点。重要的是在所有数据都可用之前能够不完成读取。
编辑
我知道我可以自己缓冲数据,而且我知道该怎么做。它只是围绕Receive 的循环,在下一个偏移量处继续。 我要问的是是否有这样一个循环的可重用实现,而不需要任何类型的自己的循环(或者当所有数据可用时完成的可重用异步实现)。
【问题讨论】:
标签: c# .net sockets networkstream