心跳的两种方式
1) 应用层面的心跳机制
好处是可以扩展可携带的消息
2) TCP协议自带的保活功能
打开keep-alive功能即可. 具体属性也可以通过API设定.
如何使用Keep-alive
int keepAlive = 1; // 开启keepalive属性. 缺省值: 0(关闭)
int keepIdle = 60; // 如果在60秒内没有任何数据交互,则进行探测. 缺省值:7200(s)
int keepInterval = 5; // 探测时发探测包的时间间隔为5秒. 缺省值:75(s)
int keepCount = 2; // 探测重试的次数. 全部超时则认定连接失效..缺省值:9(次)
setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (void*)&keepAlive, sizeof(keepAlive));
setsockopt(s, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));
setsockopt(s, SOL_TCP, TCP_KEEPINTVL, (void*)&keepInterval, sizeof(keepInterval));
setsockopt(s, SOL_TCP, TCP_KEEPCNT, (void*)&keepCount, sizeof(keepCount));
修改配置文件, 对整个系统所有的socket有效.
我们可以用cat命令查看到系统中这几个默认的值.
#cat /proc/sys/net/ipv4/tcp_keepalive_time 7200
#cat /proc/sys/net/ipv4/tcp_keepalive_intvl 75
#cat /proc/sys/net/ipv4/tcp_keepalive_probes 9
修改它们:
#echo 60 > /proc/sys/net/ipv4/tcp_keepalive_time
#echo 5 > /proc/sys/net/ipv4/tcp_keepalive_intvl
#echo 3 > /proc/sys/net/ipv4/tcp_keepalive_probes
对于Win2K/XP/2003,可以从下面的注册表项找到影响整个系统所有连接的keepalive参数:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
“KeepAliveTime”=dword:006ddd00
“KeepAliveInterval”=dword:000003e8
“MaxDataRetries”=”5″
对于实用程序来说,2小时的空闲时间太长。因此,我们需要手工开启Keepalive功能并设置合理的Keepalive参数。在XP和WIN2003系统上,可以针对单独的socket来设置,但是在windows 2000,不能单独设置,如果设置,那么影响是整个系统的所有socket。
分享到:
相关推荐
TCP通信心跳包源码C语言实现,基于Linux平台写的,可以整合到自己的代码中去。
C#TCP服务端+客户端完整示例,带心跳机制
C# 实现 TCP服务端+客户端 带心跳机制。。。
自带客户与服务端心跳包验证。 客户端掉线,服务器自动响应。 所有均为事件与封装完全分享。代码高度简洁。 服务端断线与重启,客户端自动重新连接。 客户端消息异常,快速响应事件。 客户端与服务端,调用DOME完全...
主要介绍了Java实现心跳机制的方法,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
Labview 的TCP登陆用的服务器端,跟Clients在同一台电脑调试的,客户端下载要到我的主页找了,为啥分成两次上传呢,因为每上传一次都有得分呀。
心跳包的发送,通常有两种技术 方法1:应用层自己实现的心跳包 由应用程序自己发送心跳包来检测连接是否正常... 方法2:TCP的KeepAlive保活机制 因为要考虑到一个服务器通常会连接多个客户端,因此由用户在应用层自己实现…
C#高级编程之实现Socket心跳机制,TCP网络长连接。 心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么...
这是关于WinSock_TCP_keepalive内容的知识。 通信机制中,对方是否断开,有两种判断方法。 一种就是使用心跳包,另一种就是使用KEEPALIVE.这就是关于keepalive的介绍资料
java建立TCP长链接,再加上心跳机制,下载后可以直接运行,包括server和client
TCP网络长连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。 建立起一个TCP...
TCP本身是有一个保活状态的 keep-alive机制,默认是关闭的,需要单独启动就可以;默认保活时间是2小时,不过这个机制是在协议层,也就是传输层生效的,如果应用层出问题了,就不能及时发现问题;如果想要实现断线重...
#### 心跳机制 - 服务端采用 `IdleStateHandler`,在一段时间内(默认15s)没有读到客户端消息则说明客户端已离线,服务器会触发读超时事件断开连接 - 客户端采用定时(默认10s)任务方式向服务端发送一个ping消息...
很多人在写Socket的时候会遇到心跳包响应机制跟主线程消息传输机制如何规避而互不影响,本Demo就解决了此问题,而且简单易懂,都有备注,欢迎下载学习之用。
KeepAlive
此系列例程演示了多线程TCP挂机 心跳的多种方案*被动心跳(并发型)*主动心跳(并发型)*实时数据展示*实时状态展示*回应包同步方案*连接附加数据管理方案 数组/哈希表*HTTP/HTTPS,SOSKS5代理按连接分配方案各版本差异:...
此系列例程演示了多线程TCP挂机+心跳的多种方案 *被动心跳(并发型) *主动心跳(并发型) *实时数据展示 *实时状态展示 *回应包同步方案 *连接附加数据管理方案 数组/哈希表 *HTTP/HTTPS,SOSKS5代理按连接分配方案 各...
最近在开发小程序用到了WebSocket,小程序提供了相应的原生API,与H5的API使用方式上有一些区别,所以流行的H5的一些成熟的类库使用起来有些困难,而原生API又存在一些缺陷,所以就自己实现了一套心跳重连机制。...
QT中TCP连接中的心跳机制和断线重连,通过简单的代码让刚入门的初级程序员更容易的了解网络通信中的心跳机制,和客户端断线重连机制