c # NetworkStream.Read error Невозможно прочитать данные из транспортного соединения - PullRequest
0 голосов
/ 03 апреля 2019

Я строю сервер сокетов из 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'");
        }
...