0

我想接收数据流。因此,有时数据可能会枯竭。Receive在这种情况下,如果该方法返回它迄今为止收到的内容,那就太好了。

当我使用 .NetSocket并调用它的Receive方法时,该调用是否会阻塞,直到它能够完全填满缓冲区?或者它会在它能够返回至少 1 个字节后立即返回吗?(假设套接字未关闭)

如果我明确地传递一个大小参数有关系吗?异步方法BeginReceive会有什么影响吗?(我猜这两种情况下的行为都是一样的)

阅读此答案时,您似乎应该始终期望缓冲区被填充,因为它建议您执行while (bytesRead == bytesRequested). 但是MSDN 文档中的一个示例使用了while (bytesRead > 0)

4

1 回答 1

1

网络堆栈将为您提供可用的最小值(在内核中缓冲)和您提供的应用程序缓冲区的大小。这里的技巧是,如果还没有数据可用,常规接收将阻塞,这就是您提供的这两个语句之间的区别while- 第一个在短读时中断,这可能表明您的下一次读取将阻塞,而第二个一个寻找流结束,即从另一侧关闭的套接字。

于 2012-08-30T16:31:03.863 回答