6

What is the best way to make a Tcpclient auto reconnect to the server when it's disconnected (e.g. by the server itself)?

The code I'm currently using is:

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

I'm using C# .NET

Kai
  • 5,518
  • 11
  • 40
  • 62

1 Answers1

1

There is no events available to get notification for broken connection.

There could be 2 possible solution.

  1. Polling. You have separate thread that try to poll socket continually done in different thread. Refer Instantly detect client disconnection from server socket

  2. If you have low level control over socket or the interface which is using socket, you can do try..catch for read and write methods or try..catch for wrappers of read and write methods and when there is any exception you can re-connect and try to read and write.

Community
  • 1
  • 1
  • Yes. Polling should be done at client side with the current socket –  May 31 '11 at 12:47
  • means for every connection I open I start a thread which every 5 seconds checks if the connection is still available? – Kai May 31 '11 at 12:55
  • Choice is upto you. You no need to create a new thread for each connection. You could keep a backend thread running and that does the polling for all your socket.. You need kind of observer pattern and interface for thread to call.. –  May 31 '11 at 13:08
  • I could save all connection sockets in a list and make a thread that checks the threads in the list every 5s. if a connection is not available anymore how would I do the reconnect? – Kai May 31 '11 at 13:14