4

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

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

3 回答 3

7

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

于 2009-06-17T10:16:59.737 回答
2

直接使用NetworkStream.Read()函数,而不是使用GetStream()

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

于 2009-06-17T10:16:52.420 回答
1

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

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

于 2009-06-17T10:18:09.033 回答