Я строю сервер сокетов из c #.Клиент отправляет пинг-пакет раз в секунду.Затем сервер периодически доставляет пинг-пакеты клиенту.Когда к серверу подключено около 20 устройств, через короткий промежуток времени возникает следующая ошибка:
System.IO.IOException: невозможно прочитать данные из транспортного соединения: A
Попытка подключения не удалась, потому что подключенная сторона не ответила должным образом
через определенный промежуток времени, или не удалось установить соединение, так как подключенный хост
не смог ответить.---> System.Net.Sockets.SocketException: попытка подключения
не удалась, потому что подключенная сторона не ответила должным образом через
промежуток времени или не удалось установить соединение, так как подключенный хост имеет
не удалось ответить
в System.Net.Sockets.NetworkStream.Read (буфер в байтах [], смещение Int32, размер Int32)
--- конец внутреннего исключениятрассировка стека ---
в System.Net.Sockets.NetworkStream.Read (буфер Byte [], смещение Int32, размер Int32)
в System.IO.StreamReader.ReadBuffer ()
в System.IO.StreamReader.ReadLine ()
Когда эта ошибка возникает, она возникает одновременно почти для всех подключенных клиентских сокетов.ReceivedTimeout и SendTimeout сокета сервера были изменены с 3 секунд до 10 секунд. Но есть ошибка таким же образом.
Я искал решение этой проблемы более трех d
Он разрабатывается через asp.net и распространяется через iis.
void ReceiveRunnable()
{
log.Debug($"Start 'Receive Runnable'");
try
{
int exceptionCount = 0;
string line;
while (IsRun)
{
try
{
while (socket != null && (line = reader.ReadLine()) != null)
{
exceptionCount = 0;
if (!string.IsNullOrWhiteSpace(line))
{
// Ping Packet
if (line[0] == '0')
{
ReceivePingPacket(line);
}
else
{
buffer.Enqueue(line);
}
}
}
}
catch (SocketException e)
{
log.Error(e + " e:" + e.SocketErrorCode);
break;
}
catch (IOException e)
{
if (IsRun)
{
log.Error(e);
break;
Thread.Sleep(100);
}
}
}
}
catch (Exception e)
{
if (IsRun)
{
log.Error(e);
}
}
finally
{
Close();
OnDisconnect?.Invoke(this);
}
log.Debug($"Stop 'Receive Runnable'");
}