socket程序运行一段时间后网络通讯不正常,如何解决

时间:2021-11-14 16:59:11
我写了一个socket的服务程序放在服务器上,别的机器在客户端连接。一段时间后客户端无法再连接成功,然后重新启动服务器上的程序,还是无法连接。这时服务器连上网也会不正常(页面打开不完整或者干脆打不开),重新启动机器后恢复正常,不知道这是为什么,如何解决,谢谢

13 个解决方案

#1


你的程序是基于什么协议的?
如果是普通的SOCKET程序,你的网页打不开就有点玄了

#2


是普通的socket程序 我为了测试就写了一个客户端程序不停的连接,直到连接不上为止。结果连接3000多次以后就连不上了,然后网络就不正常了,收邮件和IE都不正常,不知道是不是大部分网络端口被占用了的原因,重新启动程序也无法解决,只能重启机器。不知有没好办法不用重启机器。

#3


该回复被版主删除

#4


猜想,是不是资源耗尽,比如断开后的sock没有清除.

#5


在服务器有client连接的accept()函数后做 了什么操作?有没有记录SOCKET什么的,要是有在client断开要释放

呵呵!影响了上网是有点有趣,是就影响上网动作还是机器整体速度慢了?

建议帖出服务器处理部分!觉得是这有问题

#6


现场的情况可能是由于同时连接的人太多,连接完又不关闭(客户端是网页形式发布,所以客户可能长期打开),所以造成后面连接的人无法再连接上。我的想法是有什么方法在服务程序之外把这些原来连接在服务上的客户全停掉,然后在重新启动服务,重新接受请求。可是好像虽然服务重启,但是那些网络资源还是没有释放,所以出现以上问题,有方法可以让使用的网络资源全部释放吗?

#7


re

#8


win2k缺省的出站连接的临时端口为1024-5000,要想使用更多的出站端口需要修改注册表
修改方式:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\
项下建一个
MaxUserPort
双字节值,
例如:取值为10000时,大约有9000个端口可用

即使你closesocket(),这时也处于time_wait状态,要很长时间恢复。setsockopt()好像可以去掉这种等待,你查查!

这么野蛮的测试以后最好不要在自己的机子上作。:)

#9


是不是忘了CloseSocket?

#10


肯定是资源没有清理干净

#11


可以判断,如果连接在N秒内没有操作就closesocket掉

#12


你肯定站用了随即分配的随机本地端口,而你一直没有关闭,导致所有的port都被站用,那么当你新分配的时候就能得到有效的段口了,注意要closesocket

#13


资源耗尽

#1


你的程序是基于什么协议的?
如果是普通的SOCKET程序,你的网页打不开就有点玄了

#2


是普通的socket程序 我为了测试就写了一个客户端程序不停的连接,直到连接不上为止。结果连接3000多次以后就连不上了,然后网络就不正常了,收邮件和IE都不正常,不知道是不是大部分网络端口被占用了的原因,重新启动程序也无法解决,只能重启机器。不知有没好办法不用重启机器。

#3


该回复被版主删除

#4


猜想,是不是资源耗尽,比如断开后的sock没有清除.

#5


在服务器有client连接的accept()函数后做 了什么操作?有没有记录SOCKET什么的,要是有在client断开要释放

呵呵!影响了上网是有点有趣,是就影响上网动作还是机器整体速度慢了?

建议帖出服务器处理部分!觉得是这有问题

#6


现场的情况可能是由于同时连接的人太多,连接完又不关闭(客户端是网页形式发布,所以客户可能长期打开),所以造成后面连接的人无法再连接上。我的想法是有什么方法在服务程序之外把这些原来连接在服务上的客户全停掉,然后在重新启动服务,重新接受请求。可是好像虽然服务重启,但是那些网络资源还是没有释放,所以出现以上问题,有方法可以让使用的网络资源全部释放吗?

#7


re

#8


win2k缺省的出站连接的临时端口为1024-5000,要想使用更多的出站端口需要修改注册表
修改方式:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\
项下建一个
MaxUserPort
双字节值,
例如:取值为10000时,大约有9000个端口可用

即使你closesocket(),这时也处于time_wait状态,要很长时间恢复。setsockopt()好像可以去掉这种等待,你查查!

这么野蛮的测试以后最好不要在自己的机子上作。:)

#9


是不是忘了CloseSocket?

#10


肯定是资源没有清理干净

#11


可以判断,如果连接在N秒内没有操作就closesocket掉

#12


你肯定站用了随即分配的随机本地端口,而你一直没有关闭,导致所有的port都被站用,那么当你新分配的时候就能得到有效的段口了,注意要closesocket

#13


资源耗尽