Мне нужно написать TCP Client, у которого будет возможность повторно подключиться к серверу. Сервер может быть недоступен из-за плохого качества сетевого подключения или некоторых проблем с обслуживанием. Я ищу качественные решения в этой области.
Мои текущие решения следующие:
- сохранить состояние соединения в перечислении ConnectionState {Offline, Online, Connecting}
- создать клиент с классом
TcpClient. - создайте два таймера с именами
ConnectionCheckTimerиReconnectTimer - подключиться к серверу
- запустить поток чтения и таймер проверки соединения
- чтение выполняется с помощью tcpClient.GetStream(), а затем чтение из этого потока
- когда Exception перехватывается в состоянии клиента readerLoop, он изменяется на автономный и запускается ReconnectTimer
ConnectionCheckTimerпериодически проверяет lastMessageTimestamp и сравнивает его с текущим временем, если интервал больше maxValue запускаетReconnectTimer
В настоящее время я не удовлетворен этим решением, потому что оно по-прежнему генерирует исключения, например ObjectDisposedException на TcpClient.NetworkStream. Я ищу какую-нибудь чистую и многоразовую реализацию Tcp-переподключения клиента, которая способна справиться со всеми проблемами с сокетами, которые могут возникнуть при подключении, отключении, чтении данных.