社区
网络编程
帖子详情
局域网SOCKET通信(TCP)需要心跳包来保持长连接么?
Hello_Wrorld_2010
2011-03-03 11:09:23
RT,谢谢。。。
...全文
3290
27
打赏
收藏
局域网SOCKET通信(TCP)需要心跳包来保持长连接么?
RT,谢谢。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
27 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Cxytz01
2012-12-03
打赏
举报
回复
引用 1 楼 arong1234 的回复:
心跳不是来保持连接的,而是来检测连接断没断的
这位哥说得没错, 可以参看这个帖子,我自己悟出来了。 http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4056621&page=1&extra=#pid23712813
smwhotjay
2011-03-30
打赏
举报
回复
看需求了
jackson35296
2011-03-30
打赏
举报
回复
我从来不用心跳包,select就够了
yangyang_1980_ren
2011-03-29
打赏
举报
回复
保持连接不用心跳包吧?心跳包主要是查看对方是否在线的
西湖秀才
2011-03-29
打赏
举报
回复
可以用长连接的udp socket来检测tcp链路连接通不通
qman007
2011-03-14
打赏
举报
回复
如果没有心跳的话,时间长了就会产生“僵尸连接”,
就是通信的双方其实连接已经断了,但由于TCP并不
定时检测连接是否中断,而通信的双方又相互没有
send操作,导致该连接在通信的双方的tcp上一直有
效,占用操作系统资源。心跳就是通过定时send少量
数据,在高速LEN里仅根据其返回值就可以判断对等方
是否有效了,是很有必要的。
我几年前也是认为在高速LEN里没必要加上心跳,但在
不少实际项目中(电力公司局域网)确实出现了很多“僵尸连接”,
加上心跳后“僵尸连接”就几乎绝迹了。
精锐掷矛手
2011-03-14
打赏
举报
回复
看功能需求
MervynChina
2011-03-14
打赏
举报
回复
心跳包是应用层的应用,自己定义简单的协议包,占用的字节很少,可以尽量使资源充分利用,不出现死连接,监视连接状态,规范点,是要有心跳包的
请叫我涛哥0-0
2011-03-13
打赏
举报
回复
感觉12楼的说的很有道理,心跳包是给予应用连接的测试,不是基于网络连接的测试,当然应用程序连接失败后我们考虑是不是网络的原因,这要我们进一步来判断。
[Quote=引用 12 楼 ok1234567 的回复:]
网关是不是会强行断开连接?
不会
发送心跳包的话,也用这个sock111(Client端主动发)
需要明确:基于应用连接的测试,不是基于机器网络连接的测试,因此需要在一个确定的套接字上进行双向的连接检测(心跳包),各自维护好状态(通常为一个整形的时间戳,任何正常的通信都会更新该时间戳),心跳包只有在时间戳检测有疑问的时候才真正发送,达到一定的值才可判定断线
[/Quote]
xiayadong
2011-03-13
打赏
举报
回复
应该需要用心跳包来保持长连接的吧!!
我记得在一定时间内没有数据交接的话,网关会将连接重置的,这个时间长短不一定,一般好像在10分钟左右。具体多久好像跟只跟网关有关系。
xdw523570601
2011-03-09
打赏
举报
回复
问的有些问题,心跳可以实现这个功能
helloworld_2012
2011-03-08
打赏
举报
回复
用抓包工具可以看到,
服务器和客户端之间长时间不发包时,
会发送
数据部分长度为0的数据包
,
不知道这个包是起什么作用的。
ok1234567
2011-03-08
打赏
举报
回复
网关是不是会强行断开连接?
不会
发送心跳包的话,也用这个sock111(Client端主动发)
需要明确:基于应用连接的测试,不是基于机器网络连接的测试,因此需要在一个确定的套接字上进行双向的连接检测(心跳包),各自维护好状态(通常为一个整形的时间戳,任何正常的通信都会更新该时间戳),心跳包只有在时间戳检测有疑问的时候才真正发送,达到一定的值才可判定断线
xtdga
2011-03-08
打赏
举报
回复
觉得没有必要,除非你需要非常及时的感知TCP连接中断!
Eleven
2011-03-04
打赏
举报
回复
[Quote=引用 5 楼 oyljerry 的回复:]
心跳主要用来检测长连接状态下,网络是否异常断开,比如客户端异常死机等..
[/Quote]
同意~心跳包属于应用层协议,需自己定义协议格式
zyrr159487
2011-03-04
打赏
举报
回复
需要的吧,要不然断掉了都不知道
zyyoung
2011-03-04
打赏
举报
回复
套接字本身是有一套心跳保活机制的,不过默认的设置并不像我们一厢情愿的那样有效。在双方TCP套接字建立连接后(即都进入ESTABLISHED状态)并且在两个小时左右上层没有任何数据传输的情况下,这套机制才会被激活。
很多人认为两个小时的时间设置得很不合理。为什么不设置成为10分钟,或者更短的时间?(可以通过SO_KEEPALIVE选项设置。)但是这样做其实并不被推荐。实际上这套机制只是操作系统底层使用的一个被动机制,原理上不应该被上层应用层使用。当系统关闭一个由KEEPALIVE机制检查出来的死连接时,是不会主动通知上层应用的,只有在调用相应的IO操作在返回值中检查出来。
因此,忘记SO_KEEPALIVE,在应用层自己写一套保活机制比较靠谱。
oyljerry
2011-03-04
打赏
举报
回复
心跳主要用来检测长连接状态下,网络是否异常断开,比如客户端异常死机等..
看不见的裂痕
2011-03-04
打赏
举报
回复
我觉得是需要的,长连接肯定需要对SOCKET保暖的.要不就用短连接,资源消耗比较大.
wutaihua
2011-03-04
打赏
举报
回复
是的 心跳包一般都比较小 发送的间隔比较长。
我们公司的心跳包 一般就16个字节 可以在定义结构体的时候 定义扩展模式。方便追加内容。发送的间隔为30秒一次。
如果中间发生了通讯。比如设备端发送了指令过来 或者我们发送成功指令给设备,则延后开始重新计时30秒。
加载更多回复(4)
java
socket
心跳包
_
socket
中的短连接与
长连接
,
心跳包
示例详解
TCP
连接简介当网络
通信
时采用
TCP
协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再
需要
这个连接时它们可以释放这个连接,连接的建立是
需要
三次握手的,而释放则
需要
4次握手,所以说每个连接的建立都是
需要
资源消耗和时间消耗的经典的三次握手示意图:经典的四次握手关闭图:一、
长连接
与短连接
长连接
: 指在一个
TCP
连接上可以连续发送多个数据包,在
TCP
连...
java
长连接
心跳包
_
socket
中的短连接与
长连接
,
心跳包
示例详解
TCP
连接简介当网络
通信
时采用
TCP
协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再
需要
这个连接时它们可以释放这个连接,连接的建立是
需要
三次握手的,而释放则
需要
4次握手,所以说每个连接的建立都是
需要
资源消耗和时间消耗的经典的三次握手示意图: 经典的四次握手关闭图: 一、
长连接
与短连接
长连接
: 指在一个
TCP
连接上可以连续发送多个数据包,在TC...
linux
心跳包
检测代码_
socket
中的短连接与
长连接
,
心跳包
示例详解
TCP
连接简介当网络
通信
时采用
TCP
协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再
需要
这个连接时它们可以释放这个连接,连接的建立是
需要
三次握手的,而释放则
需要
4次握手,所以说每个连接的建立都是
需要
资源消耗和时间消耗的经典的三次握手示意图:经典的四次握手关闭图:一、
长连接
与短连接
长连接
: 指在一个
TCP
连接上可以连续发送多个数据包,在
TCP
连...
socket
中的短连接与
长连接
,
心跳包
示例详解
原地址http://blog.chinaunix.net/uid-26000296-id-3758651.html
TCP
连接简介 当网络
通信
时采用
TCP
协议时,在真正的读写操作之前,server与client之间必须建立一个连接, 当读写操作完成后,双方不再
需要
这个连接时它们可以释放这个连接, 连接的建立是
需要
三次握手的,而释放则
需要
4次握手, 所以说每个连接的建立都是
需要
资源
Socket
长连接
与短连接,心跳
Socket
长连接
与短连接,心跳
网络编程
18,356
社区成员
64,161
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章