如何在 C# 中检查套接字是否已连接/断开? [英] How to check if a socket is connected/disconnected in C#?
本文介绍了如何在 C# 中检查套接字是否已连接/断开?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果其他主机在断开连接时没有向您发送数据包(例如,因为它不正常地断开连接),您如何检查网络套接字 (System.Net.Sockets.Socket) 是否仍然连接?
How can you check if a network socket (System.Net.Sockets.Socket) is still connected if the other host doesn't send you a packet when it disconnects (e.g. because it disconnected ungracefully)?
推荐答案
As Paul Turner 回答了 在这种情况下不能使用 Socket.Connected
.您需要每次轮询连接以查看连接是否仍然处于活动状态.这是我使用的代码:
As Paul Turner answered Socket.Connected
cannot be used in this situation. You need to poll connection every time to see if connection is still active. This is code I used:
bool SocketConnected(Socket s)
{
bool part1 = s.Poll(1000, SelectMode.SelectRead);
bool part2 = (s.Available == 0);
if (part1 && part2)
return false;
else
return true;
}
它是这样工作的:
s.Poll
返回真如果- 连接已关闭、重置、终止或挂起(意味着没有活动连接)
- 连接处于活动状态,有数据可供读取
- 没有可供读取的数据,因此连接未激活
这篇关于如何在 C# 中检查套接字是否已连接/断开?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文