6

当 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;
        }
}

我正在使用 C# .NET

4

1 回答 1

1

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

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

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

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

于 2011-05-31T12:40:04.377 回答