如何在不阻塞的情况下调用NetworkStream.Read()?
问题描述:
我想空读所以我写后续码插座的缓冲...如何在不阻塞的情况下调用NetworkStream.Read()?
byte[] tempBuffer = new byte[1024];
int readCount = 0;
while ((readCount = tcpSocket.GetStream().Read(tempBuffer, 0, tempBuffer.Length)) != 0)
{
// do with tempBuffer
}
但Read()方法被阻塞,所以我说tcpSocket.ReceiveTimeout = 1;。它和以前一样工作。
据我所知,这通常用于C++。我怎么解决这个问题?
答
直接使用NetworkStream.Read()
功能,而不是使用GetStream()
:
如果没有数据可供读取, Read方法返回0 如 可用读 操作读取尽可能多的数据,直到大小参数指定的字节数 。如果 远程主机关闭了 连接,并且所有可用数据已收到 ,则读取方法 立即完成并返回零 字节。注意:
答
为什么要清空读缓冲区? 如果您不希望套接字的内容关闭它。 如果你不想要当前的内容,但会需要更晚的数据,你怎么知道什么时候开始。如果数据是非封装流...
听起来像你以错误的方式解决问题。
你是什么意思直接使用**功能**?没有那个静态成员函数。请让我看看一些代码。 – 2009-06-18 01:19:21
这是没有静态功能。如果您已阅读我提供的MSDN链接,则会看到这是NetworkStream对象上的一个方法。既然你没有提供你的`tcpSocket`变量的实际类型,我不得不从你的其他文本中猜测。 – 2009-06-18 07:58:08
我不确定你在说什么。 OP实际上是通过`tcpSocket.GetStream()`使用NetworkStream对象。 – danyim 2011-09-20 16:11:24