如何在 C# 中检查套接字是否已连接/断开? [英] How to check if a socket is connected/disconnected in C#?

查看:48
本文介绍了如何在 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆