一、什么是心跳检测

判断对方(设备,进程或其它网元)是否正常动行,一般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉。用于检测TCP的异常断开。

基本原因是服务器端不能有效的判断客户端是否在线也就是说,服务器无法区分客户端是长时间在空闲,还是已经掉线的情况。所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在而已。

代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息。如果服务端几分钟内没有收到客户端信息则视客户端断开。比如有些通信软件长时间不使用,要想知道它的状态是在线还是离线就需要心跳包,定时发包收包。
发包方可以是客户也可以是服务端,看哪边实现方便合理。一般是客户端。服务器也可以定时轮询发心跳下去。

一般来说,出于效率的考虑,是由客户端主动向服务器端发包,而不是相反。

二、关于Send函数的返回值

我们知道当客户端以优雅的方式断开TCP连接后,服务器使用Send函数发包,得到的返回值为0(说明TCP连接已断开)。然而,SEND函数的成功返回只能表示发送数据已经进入了SOCKET内核的发送队列,不一定就已经在线上或者已经被成功接收了。这可能是因为send只是往发送缓冲区拷贝数据, 刚开始缓冲区还未满,所以不会有错误发生, 只有等到相当一段长的时间后, send的返回值才会为-1。

三、定时Ping

如果服务器不能进行心跳检测的应答。可以采用定时Ping某服务器来检测TCP连接是否断开,如新浪(必须允许Ping的服务器)。PING是向远程主机发送一个ICMP包,如果给定时间内没有接收到回应就认为是超时,如果收到回应则分析接收到的ICMP包,得到TTL、类型以及用时。

不过Ping包有32字节,如果是无线连接,有时需要考虑流量问题。

四、使用TCP存活定时器

socket心跳检测相关推荐

  1. socket心跳检测和重连小demo

    转载自: http://blog.csdn.net/u011791526/article/details/53536403 有时候我们的程序要求socket一直保持连接,并且希望在socket断开以后 ...

  2. Socket心跳包异常检测的C语言实现,服务器与客户端代码案例

    在Socket心跳机制中,心跳包可以由服务器发送给客户端,也可以由客户端发送给服务器,不过比较起来,前者开销可能较大.本文实现的是由客户端给服务器发送心跳包,服务器不必返回应答包,而是通过判断客户在线 ...

  3. Socket Client 长连接及心跳检测

    简介: 所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象.一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制.从所处的地位来讲,套接 ...

  4. socket心跳机制图片_WebSocket心跳检测和重连机制

    1. 心跳重连原由 心跳和重连的目的用一句话概括就是客户端和服务端保证彼此还活着,避免丢包发生. websocket连接断开有以下两种情况: 前端断开 在使用websocket过程中,可能会出现网络断 ...

  5. socket心跳机制图片_socket心跳包机制

    心跳包 心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包 心跳包的作用 网络中的接收和发送数据都是使用SOCKET进行实现.但 ...

  6. web socket 心跳包的实现方案

    web socket 心跳包的实现方案05/30/2010 现在网络环境错综复杂,socket心跳包是获得健康强壮的连接的有效解决方案,今天,我们就在web socket中实现心跳包方案,是的,尽管我 ...

  7. Socket心跳包机制

    心跳包的发送,通常有两种技术 方法1:应用层自己实现的心跳包 由应用程序自己发送心跳包来检测连接是否正常,大致的方法是:服务器在一个 Timer事件中定时 向客户端发送一个短小精悍的数据包,然后启动一 ...

  8. Socket心跳包机制 .

    心跳包的发送,通常有两种技术 方法1:应用层自己实现的心跳包 由应用程序自己发送心跳包来检测连接是否正常,大致的方法是:服务器在一个 Timer事件中定时 向客户端发送一个短小精悍的数据包,然后启动一 ...

  9. 心跳检测以及应用层心跳包机制设计

    博主联系方式: QQ:1540984562 微信:wxid_nz49532kbh9u22 QQ交流群:892023501(嵌入式方向) QQ交流群:856398158(后端方向) 目录 心跳检测应用场 ...

最新文章

  1. Java中执行存储过程和函数(web基础学习笔记十四)
  2. kernel 3.10内核源码分析--内核栈及堆栈切换
  3. 一个奇怪的sql异常
  4. STL源码剖析 数值算法 copy 算法
  5. java testng 源代码_根据测试用例的java源码自动生成TestNG的XML文件
  6. MapStruct 常用操作
  7. Android:adb进程问题
  8. Android学习总结(4)——Andorid Studio熟练使用
  9. 一个用SAM维护多个串的根号特技
  10. B站,N站,汤站,爬虫下载资源总结与技巧(一)
  11. IPTV视频码流分析
  12. 整体二分初识--POJ2104:K-th Number
  13. 如何在MAC上使用VOSviewer和Pajek
  14. 关于使用开源版urule决策引擎优化性能和配置客户端集群同步生效的问题
  15. 博士的一天(起早贪黑版本)
  16. android socket 丢包,socket timeout exception和常见网络丢包情况
  17. oracle、mysql创建用户赋DBA权限
  18. 关于vc隐藏浏览器控件 2010-9-7 16:07
  19. 网站域名要加www吗?没有www会影响网站SEO吗?
  20. 算法竞赛入门知识干货

热门文章

  1. 操作系统复习之线程、对称多处理和微内核
  2. 个人博客 SEO 优化(2):站内优化
  3. 【419天】跃迁之路——程序员高效学习方法论探索系列(实验阶段176-2018.03.31)...
  4. 【10大专利看iPhone未来】全息图、虚拟卷轴,移动AR……苹果还有哪些黑科技?...
  5. Mysql导入zabbix的sql语句时报错:ERROR 1045 (28000)
  6. android SDK manager 无法获取更新版本列表
  7. 面向对象的程序设计之原型模式
  8. web网站无法启动报错
  9. PowerDesigner教程系列(三)概念数据模型
  10. sqlplus / as sysdba报错ORA-01031: insufficient privileges