2013-07-03 15 views
0

我有一个连接到服务器套接字应用程序客户端,我有当发生断线检测功能:C#插座 - 如何检测如果我的客户已经失去了连接

public static class SocketExtensions 
{ 
    public static bool IsConnected(this Socket socket) 
    { 
     try 
     { 
      return !(socket.Poll(1, SelectMode.SelectRead) && socket.Available == 0); 
     } 
     catch (Exception ex) 
     { 
      Trace.Exception(ex, true); 
      return false; 
     } 
    } 
} 

但有时这个功能没有检测到断开和我保持发送数据包,但在服务器不确实响应(每5秒发送我轮询消息):

12:04.40.079 ; polling ================> 3|11111 ; 
12:04.45.087 ; polling ================> 3|11111 ; 
12:04.50.094 ; polling ================> 3|11111 ; 
12:04.55.102 ; polling ================> 3|11111 ; 
12:05.00.109 ; polling ================> 3|11111 ; 

通常,我发送消息并接收另一:

12:11.03.730 ; polling ================> 3|11111 ; 
12:11.03.746 ; received <================ 4|11111 ; 

我必须关闭并再次运行我的应用程序以再次建立通信。

如何检测我是否失去与服务器的连接?

任何人都可以帮助我吗?

在此先感谢!

+0

我认为你想要的单词是“轮询”而不是“共享”。 –

回答

0

发送保持活动数据包以检测您是否丢失了与服务器的连接,如果您向服务器发送数据包但不从服务器接收到并不意味着您已丢失连接的数据包,检查服务器端是否存在另一个错误或客户端是否存在错误,调试服务器以查看是否收到来自客户端的数据包,如果您从客户端收到数据包,则连接不会丢失,但它仍然存在。

+0

你说得对,问题是我无法调试服务器,是另一个系统。 有没有其他想法? – user2547656

+0

你自己创建了服务器吗? –

+0

如果问题出在服务器端,那么在没有检查服务器的情况下,如果服务器没有发送数据,则没有其他方法可以解决此问题,如果客户端无法解决问题。如果服务器接收到您发送的数据,则意味着连接处于活动状态。如果您的客户端没有收到任何内容,则意味着服务器没有发送数据,您必须调试服务器才能解决此问题 –

相关问题