yxydoctor 发表于 2021-12-24 11:06:31

netx网络异常检测的正确打开方式

网络异常指的是插拔网线,或者连接端未正确关闭连接等等。
异常检测使用的是netx的keepalive功能,具体配置如下:
1-在nx-user中使能扩展通知,使能keepalive心跳,并配置具体超时检测时间。
2-在用户任务中开启通知,并编写回调函数。
工作原理:
只要是使能了keepalive,netx后台任务会根据超时参数自动发收,接收心跳信号包。溢出后会自动断开socket连接,这个不需要user关心,这样user代码就不会堵塞在永远等待接收状态。如果开启通知,user可以在回调函数里面设置断网标志,但并不需要你对网络异常主动做什么。
坑1:过于执着于拔网线侦测。
坑2:总想主动去侦测网络异常并主动进行任务重启。
坑3:如果用的是编译好的netx库文件,使能keepalive后,需要重新编译库文件。因为这个参数是由若干netx c文件直接使用的,没有一个库接口文件。

eric2013 发表于 2021-12-24 14:21:40

感谢楼主分享。

way2888 发表于 2022-12-17 06:33:21

请教一下,网路异常会不会导致以后接收不到数据或连接不上网络,如果一键重新初始化网路呢?

eric2013 发表于 2022-12-17 11:38:17

way2888 发表于 2022-12-17 06:33
请教一下,网路异常会不会导致以后接收不到数据或连接不上网络,如果一键重新初始化网路呢?

会有这种情况,有时候出错后就恢复不回来了。

way2888 发表于 2022-12-17 13:19:13

eric2013 发表于 2022-12-17 11:38
会有这种情况,有时候出错后就恢复不回来了。

硬汉哥,请教一下出现这个情况要怎样重新初始化网路呢?不复位单片机的前提下

eric2013 发表于 2022-12-17 13:36:48

way2888 发表于 2022-12-17 13:19
硬汉哥,请教一下出现这个情况要怎样重新初始化网路呢?不复位单片机的前提下

之前tcpnet做过一个方案,netx的后面也得专门实现个类似的方案

【实战经验分享】一劳永逸的解决网线随意热插拔问题
https://www.armbbs.cn/forum.php?mod=viewthread&tid=95386&fromuid=58
(出处: 硬汉嵌入式论坛)
页: [1]
查看完整版本: netx网络异常检测的正确打开方式