Socket服务端运行一段时间后出现无法连接上的问题

JMhappy 2020-07-16 05:48:51
环境为Socket服务端和对应客户端以及一个安卓客户端

现在服务端运行一段时间后出现客户端连接不上服务端情况,有时彻底连不上,有时过5/6分钟左右新的客户端能连上,重启服务端恢复正常。

客户端数量大概在1-100之间

现在怀疑是资源不够用,但客户端断开的时候也shutdown和close了,而且这连接数已经很少了应该不至于才对,想不到问题点在哪儿了
...全文
14436 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这个简单,把代码精简到最精简,然后再做连接测试,如果没有问题再慢慢丰满代码。
有时候这个办法在搞不清楚问题的时候,特别有效
ziqi0716 2020-09-02
  • 打赏
  • 举报
回复
建议不要直接用裸tcp协议进行通讯,你hold不住的. Http协议 Modbus协议 Mqtt协议 ..... 等等现有的协议均已经处理好了各种异常的处理,站在巨人肩上吧,那些连接管理,心跳,断包,粘包,数据可达性等问题,你都可以不用管了,只用你的关键业务逻辑. 你折腾一辈子,可能也就是重复造了几个轮子,而且不一定比现有的圆.
datafansbj 2020-09-02
  • 打赏
  • 举报
回复
服务端代码是怎么写的?如果只是按照 MSDN 上的例子使用阻塞模式来写,那么并发能力是很差的。使用 IOCP 模式会好很多。
jwh2004 2020-07-21
  • 打赏
  • 举报
回复
至少在当前有问题阶段,你应该在客户端和服务器端分别写日志文件或往数据库写记录信息,哪个ip或什么用户什么时间登陆和退出了,看看服务器没收到socket关闭有什么规律没。比较保险的方式是你客户端关闭连接前给服务端发个专门的关闭命令消息然后再关闭,服务端收到关闭命令消息如果10秒内没收到socket关闭,就主动进行关闭。 服务端关闭socket后,也要把相应的资源释放掉
  • 打赏
  • 举报
回复
服务端别说接入1个或者100个客户端,就算是同时接入上万个客户端请求也没啥。而当客户端断掉的时候,服务器端是会收到客户端中断的通知,或者至少你可以每隔几分钟给客户端发一个心跳来判断。这都是比较标准的架构点。我从来没有遇到说“客户端然后就连不上服务器了”的机制,遇到这个可以百分之一千地知道,是代码写飘了。
smwhotjay 2020-07-17
  • 打赏
  • 举报
回复
句柄泄漏了。 偷懒就搞个守护重启。 不偷懒就仔细回收资源。
孤独de猫 2020-07-16
  • 打赏
  • 举报
回复
服务器针对一些无效的连接 ,也要及时的释放资源的,如将对象dispose 或 null。也可以使用心跳包 来判断该链接是否有效。超过多长时间,没有通讯 就自动关闭连接。
  • 打赏
  • 举报
回复
那还是“本地测试”没下功夫。
JMhappy 2020-07-16
  • 打赏
  • 举报
回复
现在问题不好复现,自己本地测试模拟服务端和客户端(不包括安卓客户端)测试都能正常,连接量上去也能正常
  • 打赏
  • 举报
回复
好好检查程序 bug

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧