当前位置: 首页 > 编程语言 > C#

C#LearningTutorial-Whydoesasocketread0byteswhenmoreavailable

时间:2023-04-10 13:08:49 C#

为什么当有更多可用时,socket读取0字节我发现以下代码循环使用100%CPU:byte[]buffer=newbyte[0x10000];while(true){if(socket.Poll(5000000,SelectMode.SelectRead)==false)继续;intavailable=socket.Available;如果(可用==0)返回;intread=socket.Receive(缓冲区);Console.WriteLine("读取:"+读取+"可用:"+可用);/*...*/}输出为:读取:0可用:1读取:0可用:1读取:0可用:1读取:0可用:1读取:0可用:1...我期待套接字。接收方法来读取剩余的字节,但显然这不会导致我的代码100%循环。正如jgauffin所建议的那样,文档中写道:如果远程主机使用Shutdown方法关闭套接字连接,并且已收到所有可用数据,则Receive方法将立即完成并返回零字节。所以读取0是预期的,但只有在读取所有数据之后,而socket.Available声称不是。Socket.Available的文档只提到关闭连接会抛出异常。我怎样才能确保读取到最后一个字节?相关:这是关于如何检测依赖于套接字的关闭连接的答案。当没有更多数据并且连接关闭时可以为0你看过文档了吗?读取0字节意味着远程端点已断开连接。使用阻塞套接字或使用像BeginReceive()这样的异步方法。.Net中不需要轮询。以上是C#学习教程:为什么socket读到0字节,多了就读?如果对大家有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络收藏,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: