异步Socket怎么设计心跳包在C#中异步的TCP

异步Socket怎么设计心跳包在C#中异步的TCP,第1张

心跳包是按一定周期发送的包,用来检测TCP连接是否正常。心跳包工作逻辑如下:

1)TCP Listener(服务器端)侦听TCP Client(客户端)端的连接请求。一旦TCP Listener接受了客户端的请求,即启动一个定时器。定时器按约定的时间间隔T向客户端发送心跳包

2)客户端在连接建立后,也启动一个定时器,这个定时器定时间隔同样为T。当客户端收到心跳包后,将一个计数变量清零;在客户端定时器的事件处理方法中将这个计数变量增加1。同时检查计数变量的值。如果这个计数值大于某个数(比如2),这表示在2×T段时间内没有收到心跳包,即可以断定TCP连接出现问题。这时,客户端可以主动断开连接,然后再次请求连接服务器端。

----------------

心跳包处理过程与是否采用异步收发没有关系,也就是说,无论是同步方式还是异步方式都可以用上述心跳包处理逻辑

心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包。

心跳包在GPRS通信和CDMA通信的应用方面使用非常广泛。数据网关会定时清理没有数据的路由,心跳包通常设定在30-40秒之间。

所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在而已。代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息如果服务端几分钟内没有收到客户端信息则视客户端断开。

扩展资料:

心跳包作用:

在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项。系统默认是设置的是2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。而且逻辑层处理断线可能也不是那么好处理。一般,如果只是用于保活还是可以的。

心跳包一般来说都是在逻辑层发送空的包来实现的。下一个定时器,在一定时间间隔下发送一个空包给客户端,然后客户端反馈一个同样的空包回来,服务器如果在一定时间内收不到客户端发送过来的反馈包,那就只有认定说掉线了。只需要send或者recv一下,如果结果为零,则为掉线。

但是,在长连接下,有可能很长一段时间都没有数据往来。理论上说,这个连接是一直保持连接的,但是实际情况中,如果中间节点出现什么故障是难以知道的。更要命的是,有的节点(防火墙)会自动把一定时间之内没有数据交互的连接给断掉。

参考资料来源:百度百科-心跳包

TCP链路增加心跳的作用是保持链路的占用情况,不加的情况下,空TCP链路会被系统资源给释放。特别是在无线应用领域。除非TCP链路的传输保持较高的使用频率,可以考虑不增加心跳。

厦门四信DTU就是这样应用的!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11865547.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存