【问题标题】:How can I make a TCP Server automatically reconnect to a client? C#如何使 TCP 服务器自动重新连接到客户端? C#
【发布时间】:2016-12-15 15:41:34
【问题描述】:

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

我的想法是在连接到客户端后,服务器创建一个状态线程以每 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;
    }
}

【问题讨论】:

  • 相当肯定你不能......这就是为什么它被称为服务器

标签: c# tcp


【解决方案1】:

服务器是侦听来自客户端的连接的通信方。客户端是发起连接的客户端。如果您希望服务器重新创建与客户端的丢失连接,则在这种情况下,服务器实际上是客户端,因为它会启动一个新连接。

除了client和server这两个词的含义外:如果对等体C喜欢S连接它C必须先监听并接受传入的连接,这不是普通客户的情况。即使 C 会这样做,C 的网络实际上也必须能够被 S 访问才能创建新连接。通常情况并非如此,即如果 C 位于某个本地网络中(典型的设置在家中、工作中并且经常在手机上),则 S 无法访问 C,而 C 本身可以到达 S。因此 S 无法建立连接回到C。

【讨论】:

  • 感谢您的详细解答。是否可以检查连接是否仍然存在?如果没有,抛出异常跳转到开头,新建一个TCP客户端对象连接特定IP地址?
  • @LouisTran:您的意思是客户端是否可以在不传输应用程序数据的情况下检查连接是否存在?尝试使用TCP keep alive 或实现一些应用层心跳。
猜你喜欢
  • 2015-03-10
  • 2019-06-18
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 2016-01-24
  • 2015-08-23
  • 2021-08-12
相关资源
最近更新 更多