Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确定异步服务器中的套接字连接状态_C#_Asyncsocket - Fatal编程技术网

C# 确定异步服务器中的套接字连接状态

C# 确定异步服务器中的套接字连接状态,c#,asyncsocket,C#,Asyncsocket,是否可以检查客户端套接字当前是否保持连接活动?我使用使用异步回调操作的多线程服务器。 关于这个问题,有很多类似的问题,我已经读过关于Socket.Poll方法的文章——一切都不正常 已尝试应用此示例: bool IsConnectedAviable(Socket s) { try { if (s != null && s.Connected) { if

是否可以检查客户端套接字当前是否保持连接活动?我使用使用异步回调操作的多线程服务器。 关于这个问题,有很多类似的问题,我已经读过关于Socket.Poll方法的文章——一切都不正常

已尝试应用此示例:

    bool IsConnectedAviable(Socket s)
    {
        try
        {
            if (s != null && s.Connected)
            {
                if (s.Poll(0, SelectMode.SelectRead))
                {
                    byte[] buff = new byte[1];
                    if (s.Receive(buff, SocketFlags.Peek) == 0)
                    {
                        return false;
                    }
                    else
                    {
                        return true;
                    }
                }

                return true;
            }
            else
            {
                return false;
            }
        }
        catch
        {
            return false;
        }
    }

提前感谢!:)

我认为你必须改变你对插座的看法。稍微简化一下,它们有两种状态:“绝对断开”和“可能断开”。相应地编码。在“可能已断开连接”状态下,您最好尝试发送数据。如果您使用的是TCP,并且传输成功,则不会发生任何事情。如果没有,您将得到一个异常——但仅在几秒钟后,TCP尝试重试之后


这是物质世界的一个必要的邪恶:你乘坐的火车可能刚刚进入隧道,如果这个方法说“是的,我连接上了”,那实际上就是一个谎言。

如果你从另一端收到了一些东西,你知道连接仍然存在。如果您有一段时间没有收到来自另一端的任何信息,确定连接是否仍然有效的唯一方法是发送一些信息。

非常感谢您的澄清,例如,这有助于更好地理解它!好啊事实上,这正是我所想的,但在我看来,似乎有一个包装器或工具或东西可以提供无需发送回音即可检查连接的能力。现在,我意识到这是不可能轻松地检查出来。