TcpClient自动重新连接

Kai*_*Kai 6 c# reconnect tcpclient

在断开连接时(例如服务器本身)使Tcpclient自动重新连接到服务器的最佳方法是什么?

我目前使用的代码是:

public void ClientWork()
{
        TcpClient client = new TcpClient();

        try
        {
            try
            {
                client.Connect(ip, port);
            }
            catch(Exception ex)
            {
                logger.ErrorFormat("client.Connect: {0}", ex.Message);
                return false;
            }

            NetworkStream ns = client.GetStream();
            byte[] buff;

            while (__bRunning)
            {
                buff = new byte[1000];
                ns.Read(buff, 0, 1000);

                string line = System.Text.Encoding.Default.GetString(buff);
            }

            //ns.Close();
            client.Close();
        }
        catch(Exception e)
        {
            //Reconnect?
            client.Close();
            client = null;

            return false;
        }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用C#.NET

小智 1

没有可用于获取连接断开通知的事件。

可能有 2 种可能的解决方案。

  1. 轮询。您有单独的线程尝试在不同的线程中不断轮询套接字。请参阅立即检测客户端与服务器套接字的断开连接

  2. 如果您对套接字或使用套接字的接口具有低级别控制,则可以对读写方法执行 try..catch ,或对读写方法的包装器执行 try..catch ,并且当出现任何异常时,您可以重新执行连接并尝试读写。