TcpClient自动重新连接

时间:2011-05-31 12:28:48

标签: c# tcpclient reconnect

什么是使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

1 个答案:

答案 0 :(得分:1)

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

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

  1. 轮询。你有单独的线程试图在不同的线程中连续完成轮询套接字。请参阅Instantly detect client disconnection from server socket

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