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

发布于 07-24 10:45 字数 367 浏览 10 评论 0原文

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

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

々眼睛长脚气2024-07-31 10:45:52

You can use the DataAvailable property to see if there is anything to be read before making a call into the Read method.

离旧人2024-07-31 10:45:52

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

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

Use the NetworkStream.Read() function directly, instead of using GetStream():

If no data is available for reading,
the Read method returns 0. The Read
operation reads as much data as is
available, up to the number of bytes
specified by the size parameter.
If
the remote host shuts down the
connection, and all available data has
been received, the Read method
completes immediately and return zero
bytes. NoteNote:

恋竹姑娘2024-07-31 10:45:52

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

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

Why do you want to empty the read buffer?
If you don't want the contents of the socket close it.
If you don't want the current contents, but will want later data, how do you know when later starts. If the data is an non-encapsulated stream...

Sounds like your solving the problem in the wrong fashion.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文