loveyeguo
loveyeguo
模拟不了客户端,客户端是rtu采集模块,200多个,我不清楚客户端做了什么操作,就会引起服务器的上述错误。
总而言之,只要引起服务端上诉代码报错: 远程主机强迫关闭现有连接,其他服务端代码不要任何逻辑,只负责侦听端口。即可重现bug
> @loveyeguo 出现这种情况的时候进程是不是挂掉了? > > 我增加了log,建议从myget上拿最新代码重现这个问题,通过log再来找到导致这个问题的原因。 不是,并没有进入break,我已经打了日志,程序还是在监听的,而且运行十几个小时后,程序仍然在运行,但是已经无法建立新的连接,而旧连接还有残余2-3个存在。 你看下我前面的记录,已经修改了这个bug。虽然一直报错,但是目前运行一周多了,没有出现无法建立新连接的情况。解决办法就是增加下面代码: ``` listenSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, true); listenSocket.ReceiveTimeout = 10000; // 设置为10秒 listenSocket.SendTimeout = 10000; // 设置为10秒 ``` 但为什么这么加上就可以了,我自己也没有完全明白。大佬有空可以查查。
是否在代码 ` _logger.LogError(e, $"Listener[{this.ToString()}] failed to do AcceptAsync");`后面,应主动调用: ` client?.Close();`?
重启后又恢复正常,但是过几个小时,客户端又开始无法再次建立新连接。
以下是报错的详细内容: 然后几个小时后,后续客户端已经无法再建立新连接 ``` [2024-12-13 15:56:30.184028 +08:00]-[fail]: TcpChannelCreator[0]-[threed:6] Connection reset by remote client: ****************************异常文本**************************** 【出现时间】:2024/12/13 15:56:30 【异常类型】:SocketException 【异常信息】:远程主机强迫关闭了一个现有的连接。 【堆栈调用】: at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token) at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.c.b__4_0(Object state) --- End of stack trace from...
我再完整的描述一下: 如上,我部署了tcp服务端,目前大约有200多个tcp客户端连接。 我同时侦听了1799,1800端口。 经测试,如上错误一直在报,大概一分钟左右报一次。 持续几个小时后,1799端口已无法再次连接。但是1800端口(此端口为测试端口,目前只有几个tcp客户端连接)是正常可以连接的。 请问出现的原因是什么? 猜测是否有资源未正确释放?
请注意,我替换成原来的SuperSocket1.6老版本后,未发现任何报错信息。也没有出现后续客户端无法连接的情况!
> _logger.LogError(e, $"Listener[{this.ToString()}] failed to do AcceptAsync"); 这个记录的什么?你拿到了没有? 在线等啊大佬!!!
意思是说,无论我继承哪个IPipelineFilter,我想记录每个sessionID所有的收发日志,存到本地txt中