2016-12-15 108 views
1

下面是我对TCP服务器端的代码。问题是当客户机上的应用程序关闭时,服务器无法自动尝试每2秒重新连接,直到连接。我怎样才能做到这一点?如何使TCP服务器自动重新连接到客户端? C#

我的想法是连接到客户端后,服务器创建一个状态线程,每隔30秒向该客户端发送一个字节,如果失败--->终止连接并重试再次连接。我不确定它是否会工作。

public static TcpClient client = new TcpClient(); 
public static int port = 6446; 
public static string connectTo = "192.168.0.11"; 
public static NetworkStream dataStream; 


static void Main(string[] args) 
{ 
    int retry = 0; 

TryingConnect: 
    try 
    { 
     do 
     { 
      if (retry == 10) 
      { 
       retry = 0; 
       Console.Clear(); 
      } 
      cout("Connecting..."); 
      IPAddress ipAddress = IPAddress.Parse(connectTo); 
      client.Connect(ipAddress, port); 
     } while (client.Connected != true); 

     cout("Connected!"); 
     dataStream = client.GetStream(); 
    } 
    catch (Exception ex) 
    { 
     // Debug: MessageBox.Show(ex.ToString()); 
     retry++; 
     Thread.Sleep(2000); 
     goto TryingConnect; 
    } 
} 
+0

很确定你不能......这就是为什么它被称为_server_ – MickyD

回答

1

服务器是监听来自客户端的连接的通信方。客户端是启动连接的客户端。如果您希望服务器重新创建与客户端的丢失连接,则在此情况下,服务器实际上将成为客户端,因为它启动了新的连接。

除了的词的含义客户服务器:如果对等端C喜欢s到连接到它c必须先听和接受传入的连接,这是不针对常见的客户端的情况。即使C会这样做,C的网络实际上也必须能被S访问以创建一个新的连接。这通常不是这种情况,即如果C位于某个本地网络(典型设置在家中,工作并且经常在移动电话上),则C不能被S访问,而C本身可能达到S.因此S无法建立连接回到C.

+0

谢谢你的详细答案。是否有可能检查连接是否还活着?如果不是,则抛出异常以跳转到开头,创建一个新的TCP客户端对象以连接到特定的IP地址? –

+0

@LouisTran:你的意思是如果客户端可以在不传输应用程序数据的情况下检查连接是否存活?尝试使用[TCP keep alive](http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html)或实施一些应用程序层心跳。 –