社区
网络编程
帖子详情
局域网SOCKET通信(TCP)需要心跳包来保持长连接么?
Hello_Wrorld_2010
2011-03-03 11:09:23
RT,谢谢。。。
...全文
3004
27
打赏
收藏
局域网SOCKET通信(TCP)需要心跳包来保持长连接么?
RT,谢谢。。。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
C#
局域网
内利用
Socket
通信
C#
局域网
内基于
TCP
/IP利用
Socket
通信
基于
TCP
/IP的
局域网
多用户
通信
实现了多用户同时在线通讯。
局域网
socket
语音通话 c++.zip
局域网
socket
语音通话 c++
C#
局域网
简单远程
通信
C# 简单远程
通信
.基于C#编写的内网
TCP
通信
小程序,简单修改一下可以作为
局域网
通信
工具,第一次写的小实验
C#
socket
TCP
大文件传输同时实现断点续传
C#
socket
TCP
大文件传输同时实现断点续传
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章