lwip 实现断线重连的问题。

Guanglew 2012-08-31 08:11:34
各位大侠 , 正在学习lwip 移植到8962板子上,板子是客户端 pc是server端,先打开server端 后给板子上电,可以建立连接,但是问题是如果通信过程中突然断开,比如server端重启,连接就断开了 如何在不让板子重启的情况下 再次建立连接呢?网上说心跳帧,具体能告诉我怎么个机制吗?板子的程序中main函数先建立连接 然后在做别事情,如果采用中断方式,连接超时中断以后怎么才回到main函数? 帮帮忙啊?
...全文
1781 3 打赏 收藏 转发到动态 举报
写回复
用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连接

27,375

社区成员

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

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