Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不阻塞的情况下调用NetworkStream.Read()?_C#_Sockets_Networkstream - Fatal编程技术网

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

C# 如何在不阻塞的情况下调用NetworkStream.Read()?,c#,sockets,networkstream,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。它的工作

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

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++中。如何解决此问题?

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

如果没有可读取的数据, Read方法返回0阅读 操作读取尽可能多的数据 可用,最多字节数 由大小参数指定。如果 远程主机将关闭主机 连接,并且所有可用数据都已恢复 已接收,读取方法 立即完成并返回零 字节。注:


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

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


听起来你解决问题的方式不对。

清空缓冲区的意思是,我想从缓冲区读取所有数据并发送,而不是跳过它。通常我在制作服务器时都是这样做的。直接使用这个功能是什么意思?没有静态成员函数。请让我看一些代码。这不是静态函数。如果您阅读了我提供的MSDN链接,您会发现这是NetworkStream对象上的一个方法。由于您未能提供
tcpSocket
变量的实际类型,我不得不从您的其余文本中猜测。我不确定您在这里谈论的是什么。OP实际上是通过
tcpSocket.GetStream()
使用NetworkStream对象。为了检测断开连接,我用try-catch块包装了代码。如果我使用DataAvailable属性,我该怎么做?如果您按照我的答案中DataAvailable方法的链接进行操作,您将看到有一个代码示例可以满足您的需要。当然,你可以自由地用try-catch来处理断开连接的问题。