可以通过客户端给服务器发心跳包,比如心跳30s一次,如果超过一分钟没收到心跳包就将这个链接close掉。
解决方案 »
- 大侠帮帮忙啊!用CAsyncSocket编写的联网中国象棋,连上之后断开再连上,鼠标左键点击没有反应。
- tree节点多,一次性加载慢,有什么办法
- 无法定位程序输入点在动态链接库上
- 只有20分了,想问个关于pdf viwer的问题
- 关于const和内存释放
- CListCtrl控件的反射消息WM_CTLCOLOR不起作用,为什么?(急,在线等)
- 想编写一个类似股市分析的软件,请大虾指教
- [醒目]假如只想做技术人员,不想向管理人员发展,有什么出路和困难
- 哪位好心的大侠,快来帮帮我呀!!谁知道!!就进来!!很急!
- 如何在VC实现WIN2000一样的工具条(按纽上有图标和文字说明).最好有现在的类,谢谢帮忙!
- 请教VC++调用DLL问题:除了DLL文件,还需要别的文件吗?
- 类似这样的矩形检测怎么做,opencv
1、C 告诉 S 我要连接,你收到我的请求了吗?( C 调用 connect )
2、S 收到请求后批准 C 的连接,并且告诉 C 我收到你的请求了,你收到我的反馈了吗?
3、C 收到 S 的反馈后再告诉 S 我收到你的反馈了,我已经准备收发数据了。S 收到 C 的消息后不再发消息给 C,只是告诉应用层已经可以给 C 收发数据了(acceep 通知)如果是你自己写的协议,那么就证明客户端已经正常连接上了,只是后来其它原因导致掉线
这个还好解决,服务端另开一条线程,检测每个连接最近一次的数据传输是否超过设定值,如果超过则断了它
当然客户端也要开条线程,每过一段时间检测于服务器数据传输是否超过设定值,如果超过则发个心跳包给服务器
客户端的设定值要比服务端设置的短另外一种情况,你所说的 closesocket 没用,那就说明客户端没有正常连接上了
你所说的握手没有完成,是底层 tcp 没有完成三次握手(不是四次的)不过你自己也不清楚是什么状况,看看服务器拒绝连接的时候给的是什么错误
(服务端查看 acceep 返回的错误、客户端也要查看 connect 返回的错误)排除被攻击的情况后,只能说明你的网络状况太差了
"TcpTimedWaitDelay"=dword:0000001e试试看。
established的需要心跳包, 可以参考SIO_KEEPALIVE_VALS
原理是:TCP不轮询,需要触发