读书人

客户端封锁了为何服务器端显示连接还

发布时间: 2012-07-28 12:25:13 作者: rapoo

客户端关闭了,为何服务器端显示连接还在?
服务器和客户端分别在两台不同的物理机上,开了400机器人测试,当把机器人关掉后发现服务器端内存中有机器人残留,只收到了一部分机器人下线的通知,然后用工具查看服务器端本机网络连接进程的情况,发现是有很多与服务器相连的网络连接没有销毁
不知道为何机器人都关了,服务器这边与机器人的网络链接还在?

[解决办法]
就是这样 异常断开,服务器没法知道。比如客户端连接上服务器,然后拔掉网线,服务器就没法知道断开了。可以使用心跳包机制。超时之后,服务器主动关闭连接
[解决办法]
这个情况很常见。
1、你在服务端查看到的tcp连接,很有可能是time_wait状态,说明连接即将被释放,实际上这个时候连接已经不存在了
2、你在服务端看到的连接,很有可能其recv queue或者send queue不为空,这样协议栈还不会主动发出FIN请求,这个时候连接刚刚关闭了一半,一般状态为CLOSE_WAIT。

明白这两种状态,就知道为什么连接还存在。另外还有一种情况是这样,客户端和服务器直接通过1层或者多层路由器或者防火墙连通,这样可能一侧连接断开后,防火墙另一侧还没有把连接给断开,这种情况极少见。

读书人网 >C++

热点推荐