Csharp/C#教程:当更多可用时,为什么套接字读取0个字节分享


当更多可用时,为什么套接字读取0个字节

我发现以下代码循环使用100%的CPU:

byte[] buffer = new byte[0x10000]; while (true) { if (socket.Poll (5000000, SelectMode.SelectRead) == false) continue; int available = socket.Available; if (available == 0) return; int read = socket.Receive (buffer); Console.WriteLine ("Read: " + read + " Available: " + available); /* ... */ } 

输出是:

 Read: 0 Available: 1 Read: 0 Available: 1 Read: 0 Available: 1 Read: 0 Available: 1 Read: 0 Available: 1 ... 

我期待socket.Receive方法读取剩余的字节但显然不会导致我的代码循环100%。

正如jgauffin所建议的那样, 文档中写道:

如果远程主机使用Shutdown方法关闭Socket连接,并且已收到所有可用数据 ,则Receive方法将立即完成并返回零字节。

所以读取0是预期的,但只有在读取所有数据之后,哪个socket.Available声称不是。

Socket.Available的文档仅提及抛出exception的已关闭连接。

我怎样才能确保读取最后一个字节?

相关: 这是如何检测依赖于套接字的已关闭连接的答案。当没有更多数据且连接已关闭时,可以为0

你看过文件了吗?

0字节读取意味着远程端点已断开连接。

使用阻塞套接字或使用BeginReceive()等异步方法。 .Net中不需要Poll

上述就是C#学习教程:当更多可用时,为什么套接字读取0个字节分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1045307.html

(0)
上一篇 2022年2月5日
下一篇 2022年2月5日

精彩推荐