TcpClient Auto-Reconnect - PullRequest
       17

TcpClient Auto-Reconnect

6 голосов
/ 31 мая 2011

Каков наилучший способ автоматического переподключения 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 Ответ

1 голос
/ 31 мая 2011

Нет событий для получения уведомления о разрыве соединения.

Возможны 2 варианта решения.

  1. Опрос.У вас есть отдельный поток, который пытается постоянно опрашивать сокет в другом потоке.См. Мгновенно обнаружить отключение клиента от сокета сервера

  2. Если у вас низкий уровень контроля над сокетом или интерфейсом, который использует сокет, вы можете сделать try..catch forметоды read and write или try..catch для оболочек методов read и write, и когда есть какое-либо исключение, вы можете заново подключиться и попробовать читать и писать.

...