社区
网络编程
帖子详情
局域网SOCKET通信(TCP)需要心跳包来保持长连接么?
Hello_Wrorld_2010
2011-03-03 11:09:23
RT,谢谢。。。
...全文
2269
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
打赏
举报
回复
心跳主要用来检测长连接状态下,网络是否异常断开,比如客户端异常死机等..
傻X
2011-03-04
打赏
举报
回复
我觉得是需要的,长连接肯定需要对SOCKET保暖的.要不就用短连接,资源消耗比较大.
wutaihua
2011-03-04
打赏
举报
回复
是的 心跳包一般都比较小 发送的间隔比较长。
我们公司的心跳包 一般就16个字节 可以在定义结构体的时候 定义扩展模式。方便追加内容。发送的间隔为30秒一次。
如果中间发生了通讯。比如设备端发送了指令过来 或者我们发送成功指令给设备,则延后开始重新计时30秒。
加载更多回复(4)
局域网
SOCKET
通信
(
TCP
)
需要
心跳包
来
保持
长连接
么
转载地址:http://blog.csdn.net/lsccsl/article/details/6629917 偶然看到,免得忘了,拿来主义,知道结果即可,不追究 链接如下,在第7楼 http://cache.baidu.com/c?m=9d78d513d98510ed4fece4697c66c0171b4381132ba6d3020ca58438e5732d4
java
socket
心跳包
_
socket
中的短连接与
长连接
,
心跳包
示例详解
TCP
连接简介当网络
通信
时采用
TCP
协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再
需要
这个连接时它们可以释放这个连接,连接的建立是
需要
三次握手的,而释放则
需要
4次握手,所以说每个连接的建立都是
需要
资源消耗和时间消耗的经典的三次握手示意图:经典的四次握手关闭图:一、
长连接
与短连接
长连接
: 指在一个
TCP
连接上可以连续发送多个数据包,在
TCP
连...
Socket
长连接
和短连接
1 概念
Socket
:
socket
实际上是对
TCP
/IP进行的封装,我们可以使用
socket
套接字通过
socket
来传输。首先我们
需要
明白的一个概念就是通道,简单地说通道就是两个对端可以随时传输数据的信道。我么常说的所谓建立
socket
连接,也就是建立了客户端与服务器端的通道。 长短连接:显而易见,
长连接
也就是这个
socket
连接一直
保持
连接,也就是通道一直
保持
通畅,两个对端
Python+
socket
完美实现
TCP
长连接
保持
存活
推荐教材:《Python程序设计(第2版)》,ISBN:978-7-302-43651-5,董付国,清华大学出版社,第17次印刷,清华大学出版社2019年度畅销图书图书详情:配套资源:...
java
长连接
心跳包
_
长连接
和端连接
心跳包
机制
TCP
连接简介当网络
通信
时采用
TCP
协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再
需要
这个连接时它们可以释放这个连接,连接的建立是
需要
三次握手的,而释放则
需要
4次握手,所以说每个连接的建立都是
需要
资源消耗和时间消耗的经典的三次握手示意图:经典的四次握手关闭图:一、
长连接
与短连接
长连接
: 指在一个
TCP
连接上可以连续发送多个数据包...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章