这两天我们都在重复的测试汉枫的串口服务器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,看来廉颇老矣!

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

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

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

  1. Linux环境模拟断网

    用root用户,执行以下restart_network.sh脚本即可完成模拟Linux服务器断网 切记执行命令要使用nohup,即:nohup sh restarrt_network.sh & ...

  2. linux 命令断网,linux 断网 扫描基本命令(示例代码)

    kali使用arpspoof命令进行ARP欺骗. 做法是获取目标主机IP镜像流量,再进行ARP欺骗. 此次测试实在局域网中进行,使用kali虚拟机和Windows10物理机测试. 最终效果是利用kal ...

  3. linux自动断网,adsl自动断网的解决

    adsl自动断网的解决 发布时间:2011-05-29 09:53:48来源:红联作者:okzokz123 前言:有时候当你挂BT 外出回来却发现早已断线 有可能机器白开了一天 下面的方法可以解决这个 ...

  4. linux怎么断网怎么使用yum_电脑突然断网,连接不上网络怎么办?三种方法轻松找回...

    很多朋友在用电脑的时候,经常会出现断网的现象,网络无法连接或者连不上,不管再怎么尝试,就是没有效果,那么接下来小编来教大家三种方法,解决无法连接网络的问题. 一.启动WLAN AutoConfig服务 ...

  5. Linux Anaconda断网创建虚拟环境

    修改linux默认的Anaconda路径 查看当前python路径,看是否为预期python路径,若不是,就继续往下 which python 修改默认python路径 vim ~/.bash_pro ...

  6. linux查看断网日志命令,Linux Screen命令使程序远离断网影响(示例代码)

    linux中强大的screen命令2008-12-02 21:53今天发现了一个"宝贝",就是Linux的screen命令,对于远程登录来说,不仅提供了类似于nohup的功能,而且 ...

  7. VM上linux突然断网解决办法

     今天启动虚拟机,本来打算更新一下安装包,结果居然解析不出一堆域名,网上一看,网络连接标识没了,根据经验去看了下虚拟机设置,NAT没错啊,我又给改成物理连接,重启,没用!  网上有个老哥讲适配器网络共 ...

  8. Linux设置断网自动关机(蓄电池)

    0. 切换root su root 1. 创建脚本文件 在/usr/sbin/下创建TG500.sh,代码如下: #!/bin/shping -c 1 192.168.1.1 > /dev/nu ...

  9. 物联网前景广阔 但美国断网事件敲响安全警钟

    随着业界安全防御能力的提升,近年来大规模的网络安全事故在全球近乎于销声匿迹.然而近日美国用户却遭遇到了一次集体断网,让很多人陷入混乱之中. 对本次断网事件追根溯源,发现其主要原因是攻击者利用大量物联网 ...

最新文章

  1. js小球与边框碰撞反弹_四叉树在碰撞检测中的应用
  2. java compareto date_int compareTo(Date anotherDate)
  3. mysql缓存 碎片_Mysql查询缓存碎片、缓存命中率及Nagios监控
  4. SpringAOP中通过JoinPoint获取值,并且实现redis注解
  5. 笔记·mybatis核心对象和全局配置文件
  6. redis 持久化详解 RDB和AOF 优缺点
  7. 【RabbitMQ】6、rabbitmq生产者的消息确认
  8. mysql过滤效率和java过滤效率_如何合理选择初中高效过滤器的效率?
  9. Servlet的文件上传
  10. 「雕爷学编程」Arduino动手做(21)——激光开关模块
  11. 微信小程序实现语音识别功能
  12. mysql子查询的语法,MySQL语法------13-----子查询(三)
  13. 持久化存储与HTTP缓存
  14. ps 转换透明 背景图
  15. Qt绘制中国地图轮廓边界
  16. c语言定义函数return,在C语言的函数定义中,如果不需要返回结果,就可以省略return语句。...
  17. L0到L4超全介绍!30+自动驾驶方案汇总
  18. 【Android 安装包优化】Android 中使用 SVG 图片 ( 批量转换 SVG 格式图片为 Vector Asset 矢量图资源 )
  19. 英国正在大举进军AI,看懂其三大投资走向
  20. 【.Net码农】ListT 类

热门文章

  1. String 源码探究
  2. 2018/2/11 ELK技术栈之ElasticSearch学习笔记二
  3. UVALive 7077 Little Zu Chongzhi's Triangles (有序序列和三角形的关系)
  4. Java中的break和continue关键字使用总结
  5. windows8.1 plsql连接oracle
  6. CSS背景图像的简单响应
  7. 从本地或网页加载图片
  8. 懒惰是人类进步的动力,勤奋是实现偷懒的途径
  9. 如何用VB.Net创建一个三层的数据库应用程序
  10. [转载] python字符串转有符号数字_在python中将字符串转换为8位带符号整数