我正在构建由c#制成的套接字服务器。 客户端每秒发送一次ping数据包。 然后,服务器会定期将ping数据包传递到客户端。 当大约有20台设备连接到服务器时,短时间后会发生以下错误。
System.IO.IOException:无法从传输连接中读取数据:A
连接尝试失败,因为连接方未正确响应
一段时间后,或由于连接的主机
而建立的连接失败没有响应。 ---> System.Net.Sockets.SocketException:连接
尝试失败,因为关联方在
之后未正确响应时间段,或由于连接的主机具有
而建立的连接失败回复失败
在System.Net.Sockets.NetworkStream.Read(字节[]缓冲区,Int32偏移量,Int32大小)
---内部异常堆栈跟踪的结尾---
在System.Net.Sockets.NetworkStream.Read(字节[]缓冲区,Int32偏移量,Int32大小)
在System.IO.StreamReader.ReadBuffer()
在System.IO.StreamReader.ReadLine()
发生该错误时,几乎所有连接的客户端套接字都同时发生该错误。 服务器套接字的ReceivedTimeout和SendTimeout从3秒更改为10秒,但是以相同的方式出现错误。
我一直在寻找解决这个问题超过三天的方法
它正在通过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'");
}