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