stm32 LWIP 作为server如何在通信中判断网络异常(如网线断开) |
您所在的位置:网站首页 › tcp如何检测网线断开 › stm32 LWIP 作为server如何在通信中判断网络异常(如网线断开) |
环境:我用的是stm32f407,freertos+lwip,用的是代码是stm32cube自动生成的。NETCONN API接口。 解决的问题:stm32作为server和client通信,当网络连接上以后,netconn_recv接收数据,但是网络出现异常,client端断开或者网卡disable,网线拔掉等,server并不知道,还会在netconn_recv中继续等待数据,client再次连接和发送数据就会无响应。 解决方法:利用 tcp 中的keepalive机制。 1. 打开使能此功能的宏LWIP_TCP_KEEPALIVE,如图: 2.设置此功能,分别设置下面几个宏的值: TCP_KEEPIDLE_DEFAULT: 多少时间内没有数据传输,就会发送keepalive的package来检查是否连接 TCP_KEEPINTVL_DEFAULT:发送package的时间间隔 TCP_KEEPCNT_DEFAULT:检查没有连接的次数就会报错 如图: 3.code中,在recv之前设置keepalive option,如图: 这样通过err值来判断是否网络异常,若是网络异常关闭client的socket,再次等待client连接即可。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |