stm32 LWIP 作为server如何在通信中判断网络异常(如网线断开)

您所在的位置:网站首页 tcp如何检测网线断开 stm32 LWIP 作为server如何在通信中判断网络异常(如网线断开)

stm32 LWIP 作为server如何在通信中判断网络异常(如网线断开)

2023-06-30 17:14| 来源: 网络整理| 查看: 265

环境:我用的是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