可以通过客户端给服务器发心跳包,比如心跳30s一次,如果超过一分钟没收到心跳包就将这个链接close掉。
解决方案 »
- [200]分很急的请问各位一个消息处理问题:PreTranslateMessage(MSG *pMsg),很急的请求帮助,谢谢!有两个同样的问题,解决马上结题;
- 在对话框中加入位图,按下鼠标左键拖动位图的问题(100分急求!!!)
- 怎么用C++实现邮件发送~
- 如何做多国语言界面?
- 为何这样不能判断文件或文件夹的属性?
- COM使用多线程访问的问题!请教各位!
- 请问我在对话框中添加了CEdit编辑框,该如何使用类对象在该编辑框中添加多行文本?
- 关于构造函数的问题
- DirectShow----WM_GRAPHNOTIFY怪问题!!!
- 怎样下载媒体文件*.afx,
- 请教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不轮询,需要触发