lwip 实现断线重连的问题。

Guanglew 2012-08-31 08:11:34
各位大侠 , 正在学习lwip 移植到8962板子上,板子是客户端 pc是server端,先打开server端 后给板子上电,可以建立连接,但是问题是如果通信过程中突然断开,比如server端重启,连接就断开了 如何在不让板子重启的情况下 再次建立连接呢?网上说心跳帧,具体能告诉我怎么个机制吗?板子的程序中main函数先建立连接 然后在做别事情,如果采用中断方式,连接超时中断以后怎么才回到main函数? 帮帮忙啊?
...全文
1958 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wilyas 2014-03-18
  • 打赏
  • 举报
回复
所谓的心跳帧,是在协议层使用TCP_KEEPALIVE功能; 经实测,效果很好! 具体步骤如下:(LWIP 1.3.1版本,默认开启socket API接口) 协议层的配置: lwipopts.h中开启LWIP_TCP_KEEPALIVE功能 同时应用层: 使用setsockopt()设置SO_KEEPALIVE、TCP_KEEPIDLE、TCP_KEEPINTVL、TCP_KEEPCNT; 代码: int val = SO_KEEPALIVE; setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &val, 4); int keepIdle = 6; //in seconds int keepInterval = 5; //in seconds int keepCount = 3; setsockopt(connected, IPPROTO_TCP, TCP_KEEPIDLE, (void *)&keepIdle, sizeof(keepIdle)); setsockopt(connected, IPPROTO_TCP,TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval)); setsockopt(connected,IPPROTO_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount)); 具体TCP_KEEPALIVE的使用可以参考网上关于标准SO_KEEPALIVE套接口选项相关资料
asnowgober 2013-06-21
  • 打赏
  • 举报
回复
引用 楼主 jacky_wang_123 的回复:
各位大侠 , 正在学习lwip 移植到8962板子上,板子是客户端 pc是server端,先打开server端 后给板子上电,可以建立连接,但是问题是如果通信过程中突然断开,比如server端重启,连接就断开了 如何在不让板子重启的情况下 再次建立连接呢?网上说心跳帧,具体能告诉我怎么个机制吗?板子的程序中main函数先建立连接 然后在做别事情,如果采用中断方式,连接超时中断以后怎么才回到main函数? 帮帮忙啊?
楼主这个问题后来怎么解决的啊?
inurlcn 2012-11-29
  • 打赏
  • 举报
回复
板子上的网络芯片(如DM9000)等,可以检测到网络断开的一个中断。在此中断里面硬件复位DM9000芯片以及断开TCP连接
使用stm32cubeide stm32f407 lan8720a freertos lwip 实现tcp client网络数据转串口数据过程详解,含详解文档、工程代码,参考博客: https://blog.csdn.net/li171049/article/details/147123466?spm=1011.2415.3001.5331 目录 1前言 1 2硬件设计 2 3软件设计 2 3.1时钟配置 3 3.2总体配置 3 3.3Phy的复位管教 4 3.4ETH的配置 5 3.5freeRTOS的配置 5 3.6Lwip的配置 6 4关键代码 6 4.1Phy开机复位 6 4.2tcp客户端初始化 6 4.3tcp服务端初始化 9 5测试记录 9 5.1电脑IP配置 9 5.2ping包测试 10 5.3网络调试助手模拟tcp服务端,STM32为tcp客户端 10 5.4网络调试助手模拟tcp客户端,STM32为tcp服务端 11 项目需要使用MCU实现网络功能,后续确定方案stm32f407 外接lan8720a实现硬件平台搭建,针对lan8720a也是用的比较多的phy,网上比较多的开发板,硬件上都是选用了这个phy,项目周期比较短,选用了这个常用phy。 这里尝试使用raw api进行编程,但是测试效果不理想,太差了,不够稳定,很多时候不能建立链接。排查问题后发现,tcp_new();后的网卡地址默认为0,无法和远端地址建立路由关系,Don't even try to send a SYN packet if we have no route since that will fail。就替换为NETCONN API进行tcp客户端设计。 采用NETCONN API实现tcp 客户端,考虑tcp连接的断掉重连,优化设计,实现客户端断弦、断电,开机重连等设计。

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧