Оберните любые действия, такие как чтение или запись в Try .. Catch ..
, и поймайте все ошибки. Затем в вашем улове вы пытаетесь восстановить соединение. Если переподключение прошло успешно, повторите попытку. Если нет, то сбросьте ошибку и, наконец, остановитесь. Или повторите попытку навсегда.
Существует также популярная библиотека. net для этого, Полли .
// Retry once
Policy
.Handle<SomeExceptionType>()
.Retry()
// Retry multiple times
Policy
.Handle<SomeExceptionType>()
.Retry(3)
// Retry multiple times, calling an action on each retry
// with the current exception and retry count
Policy
.Handle<SomeExceptionType>()
.Retry(3, onRetry: (exception, retryCount) =>
{
// Add logic to be executed before each retry, such as logging
});
В вашем случае, что-то вроде этого:
public void DoWork()
{
byte[] bytes = new byte[1024];
int bytesRead;
while (true)
try
{
bytesRead = networkStream.Read(bytes, 0, bytes.Length);
}
catch (Exception e)
{
Console.WriteLine("Could not get data from network stream, trying to reconnect. " + e.Message);
tcpClient.Reconnect(); // Do your reconnect here.
if (!tcpClient.isConnected)
{
Console.WriteLine("Could not reconnect, rethrowing error");
throw e;
}
}
tcpClient.Close();
ConnectToUserServer();
}