A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孟浩然 中级黑马   /  2012-6-28 17:48  /  2839 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孟浩然 于 2012-6-30 09:05 编辑

在网上看帖子的时候看到的,第一次听说,我只知道心跳包可以用来测试连接是否存在的。发送心跳包的程序应该以独立的线程存在的吧,那么这个发送程序时定义在哪儿呢?假如是服务端要实时测试客户端是否在线,定时发送这个心跳包的是不是应该是服务端,客户端接收这个心跳包,然后返回一个信息给服务端,如果在一段时间内,服务端没有收到客户端的回复,则证明他俩的连接挂了。这些都是个人的理解,还有个问题时,发送的心跳包的数据是什么,是不是任何数据都可以,我直接定义一个空数据的数据包是不是也可以? 哪位可以给出一段自定义发送心跳包的代码更好了,谢谢

2 个回复

倒序浏览
心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。  心跳包一般来说都是在逻辑层发送空的echo包来实现的。下一个定时器,在一定时间间隔下发送一个空包给客户端,然后客户端反馈一个同样的空包回来,服务器如果在一定时间内收不到客户端发送过来的反馈包,那就只有认定说掉线了。
    其实,要判定掉线,只需要send或者recv一下,如果结果为零,则为掉线。

评分

参与人数 1技术分 +1 收起 理由
刘蕴学 + 1

查看全部评分

回复 使用道具 举报
赵倩倩 发表于 2012-6-28 19:33
心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实 ...

知道了,是定义在服务端,发送给客户端,然后客户端反馈,服务端通过判断能否收到反馈来判断的,至于客户端怎么判断一般的数据包还是心跳包,还得继续研究了,谢谢了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马