当前位置: 代码迷 >> 开发方法 >> QQ的心跳机制是这样的?该怎么处理
  详细解决方案

QQ的心跳机制是这样的?该怎么处理

热度:1401   发布时间:2013-02-26 00:00:00.0
QQ的心跳机制是这样的?
最近发现QQ在状态检测上很灵敏,adsl断线了立马就能检测出来 
相比同类的其他软件,如skype之流,则要过一段时间才能提示断线; 
再者,当adsl恢复,qq立马也能检测出来,开始登陆。 

请问这样的机制是怎么实现的呢?通过心跳包?不太可能啊,如果过一固定的时间发心跳,应该比较久才能检测失败才对; 
再说,adsl恢复也不可能实现触发心跳的啊? 
抓包看了qq发的icq协议也没有固定间隔的包出现! 

疑问,这样的机制很先进的嘛,不知道怎么实现的?

------解决方案--------------------------------------------------------
同问
------解决方案--------------------------------------------------------
同问
------解决方案--------------------------------------------------------
没人回答?
------解决方案--------------------------------------------------------
是不是直接由设备驱动触发的呢?
------解决方案--------------------------------------------------------
呵呵,你用过网管软件就知道了
------解决方案--------------------------------------------------------
o..楼上的,那就是怎么样呀?给点提示说辞啦
------解决方案--------------------------------------------------------
速度没有LZ所说的那么快,与服务器断开连接后QQ就迅速下线了(没有这么快,可以接个HUB或交换机上拔掉与服务器的网线试试)。

1.QQ与服务器的连接状态通过心跳机制来实现,每隔一段时间(10s)发一个HELLO包,包内容示例如下:
0000 ff ff ff ff ff ff 00 11 43 e7 a6 66 08 00 45 00 ........ C..f..E.
0010 00 2a 11 05 00 00 80 11 69 15 c0 a8 00 01 ff ff .*...... i.......
0020 ff ff 1d e6 1d e6 00 16 44 9f 48 65 6c 6c 6f 2c ........ D.Hello,
0030 20 34 20 2d 2d 2d 2d 21 00 00 00 00 4 ----! ....
先用TCPVIEW查看QQ的连接端口,可能有28个左右,然后用Ethereal抓取一下相关的网络包就知道了。

2.再连接时的速度要快一些,不是通过心跳包实现的,断线后QQ不再发送上面的心跳包,在连接后才恢复发送心跳包,可能是通过获取系统TCPIP状态来实现的,可以用Procmon看一下QQ的操作。
  相关解决方案