2009-06-17 70 views
3

我想空读所以我写后续码插座的缓冲...如何在不阻塞的情况下调用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++。我怎么解决这个问题?

回答

4

您可以使用DataAvailable属性来查看在调用Read方法之前是否有任何要读取的内容。

2

直接使用NetworkStream.Read()功能,而不是使用GetStream()

如果没有数据可供读取, Read方法返回0 如 可用读 操作读取尽可能多的数据,直到大小参数指定的字节数 。如果 远程主机关闭了 连接,并且所有可用数据已收到 ,则读取方法 立即完成并返回零 字节。注意:

+0

你是什么意思直接使用**功能**?没有那个静态成员函数。请让我看看一些代码。 – 2009-06-18 01:19:21

+0

这是没有静态功能。如果您已阅读我提供的MSDN链接,则会看到这是NetworkStream对象上的一个方法。既然你没有提供你的`tcpSocket`变量的实际类型,我不得不从你的其他文本中猜测。 – 2009-06-18 07:58:08

+4

我不确定你在说什么。 OP实际上是通过`tcpSocket.GetStream()`使用NetworkStream对象。 – danyim 2011-09-20 16:11:24

1

为什么要清空读缓冲区? 如果您不希望套接字的内容关闭它。 如果你不想要当前的内容,但会需要更晚的数据,你怎么知道什么时候开始。如果数据是非封装流...

听起来像你以错误的方式解决问题。

相关问题