我想清空套接字的读缓冲区,所以我编写了以下代码...
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 ++。我该如何解决这个问题?
答案 0 :(得分:5)
您可以使用DataAvailable属性查看在调用Read方法之前是否有任何要读取的内容。
答案 1 :(得分:2)
直接使用NetworkStream.Read()
功能,而不是使用GetStream()
:
如果没有可供阅读的数据, Read方法返回0. Read 操作读取尽可能多的数据 可用,最多可达字节数 由size参数指定。如果 远程主机关闭了 连接,以及所有可用数据 已收到,Read方法 立即完成并返回零 字节。 NoteNote:
答案 2 :(得分:1)
为什么要清空读缓冲区? 如果您不希望套接字的内容关闭它。 如果您不想要当前的内容,但需要以后的数据,您怎么知道以后何时开始。如果数据是非封装流......
听起来像是以错误的方式解决问题。