2012-06-20 109 views
1

是否有可能检查客户端套接字此时是否保持连接处于活动状态?我使用使用AsyncCallBack操作的多线程服务器。 有关于这个问题的很多类似的问题,我读过关于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; 
     } 
    } 

提前感谢! :)

回答

2

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

+0

好的。其实,这正是我想,但在我看来,有一个包装或工具或东西,可以提供查询,而不发送回声的连接能力。现在,我意识到无法轻松检查它。 –

0

我认为你必须改变你对套接字的看法。简化一下,他们有两个状态:“绝对断开”和“也许断开连接”。相应地编码。在“可能已断开连接”状态下,您可以做的最好的尝试是发送数据。如果您使用TCP,并且交付成功,则不会发生任何事情。如果没有,你会得到一个例外 - 但是在TCP尝试重试之后,只有

这是物理世界的必要之恶:你是在火车上可能刚进入隧道,如果该方法说:“是的,我连”这实际上是一个谎言。

+0

非常感谢澄清和相关的实例,它有助于理解它好多了! –