如何在不阻塞的情况下调用NetworkStream.Read()?

时间:2009-06-17 10:03:29

标签: c# sockets networkstream

我想清空套接字的读缓冲区,所以我编写了以下代码...

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 ++。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

  

如果没有可供阅读的数据,   Read方法返回0. Read   操作读取尽可能多的数据   可用,最多可达字节数   由size参数指定。如果   远程主机关闭了   连接,以及所有可用数据   已收到,Read方法   立即完成并返回零   字节。 NoteNote:

答案 2 :(得分:1)

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

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