如何在不阻塞的情况下调用 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++中。 我怎么解决这个问题?
I'd like to empty read buffer of the socket so I wrote follow code...
byte[] tempBuffer = new byte[1024];
int readCount = 0;
while ((readCount = tcpSocket.GetStream().Read(tempBuffer, 0, tempBuffer.Length)) != 0)
{
// do with tempBuffer
}
But Read() method is blocked so I added tcpSocket.ReceiveTimeout = 1;. And it works just like before.
As I know, this is usually used in C++. How can I solve this problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(3)
离旧人2024-07-31 10:45:52
使用 NetworkStream.Read()
直接调用函数,而不是使用GetStream()
:
如果没有数据可供读取,
Read 方法返回 0。 Read
操作读取尽可能多的数据
可用,最多字节数
由尺寸参数指定。如果
远程主机关闭
连接,并且所有可用数据都有
已收到,Read方法
立即完成并返回零
字节。 注意注:
~没有更多了~
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
您可以使用 DataAvailable< /a> 属性以查看在调用 Read 方法之前是否有任何内容要读取。
You can use the DataAvailable property to see if there is anything to be read before making a call into the Read method.