linux tcp 断网重连,LIS接口与串口服务器的KeepAlive的重连机制

这两天我们都在重复的测试汉枫的串口服务器HF2211,当把串口服务器当做TCP-CLIENT来用,去连接服务器端的时候,我发现我把掉网线再连接后,串口服务器的状态栏里面依然显示为连接成功!

这是个奇怪的问题,我记得我以前做危急值报告系统时候为了实现长连接,在TCP层面使用心跳包才解决网络中断后重连的问题。

百度了一下KeepAlive机制,才恍然大悟。

在以前我们做断网重连,采用发送心跳包的方式来判断网络是否是断了,因此客户端需要发送心跳包,服务端要回复心跳包,这样客户端和服务端才都能够知道是否网络断开了。

在windows2000以后,TCP协议已经增加了KeepAlive的协议了,而且在windows和Linux上都支持。有一端设置了keepalive的话,例如10s,在没有数据传输的时候,设置了这一端就会发包去询问另外一端是否在线,如果不在线就直接把错误抛出来,那么程序就能够识别网络是否断开,Client端再去重新连接。

经过我的测试一般设置client端30s,Server端60s。之所以不同是为了错开两个的时间,刚好都设置30秒容易一端刚连上,另外一端又断开了。

那么既然TCP协议有了keepalive机制,我们还在程序应用层发心跳包有啥意义呢?

哦,大概是用来确保更加稳定的连接,以及除了网络层是好的,程序的逻辑层是否也好的?能够发心跳包,大概程序没卡死,至少数据处理的线程还活着吧!

Cache数据库也是支持keepalive的,但是接口开发的要求就会高一点了,你要识别出断网的错误,然后进行重连:

if ($$$ISERR(status))

{

d ..Trace(“READ_ERROR:”_$ZERROR)

i (..IP’=””)

{

hang 10

if (..Open(..IP,..Port,..CharEncode))

{

d ..Trace(“RECONNECT_SUCESS:”)

}

}

}

然后又回去看了一下MOXA的串口服务器,并没有KeepAlive,看来廉颇老矣!

如无特别说明,本博客文章皆为原创。转载请说明,来自吵吵博客。

吵吵微信朋友圈,请付款实名加入:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值