• 关于LWIP断开网线后重连问题(热插拔问题)


        近期在弄STM32+LWIP协议。在网络拔掉网线情况下。无法又一次连接。

    网上找了好多方法都没有实现,着实郁闷!

    后来无意间看到了临时解决这一问题的方法。尽管不是那么完美,但最算能解决这个问题。分享给大家。


    问题:LWIP建立一个TCPserver,收发数据也正常。可是client非正常断线-如client掉电,突然拔掉client的网线,然后又一次连接server,就连接不上了。


    原因:LWIP_CLOSE(),在非正常断线情况下使用不知道有什么还占着内存释放不了,没法正常释放资源。

    有高手知道怎么释放,能够指点一下。


    我的方法是:使用协议栈自带的keep alive功能。自己主动检測网络是否掉线,来释放资源。

    利用lwip的回调机制。每次建立连接成功的时候回调用acept函数,在里面加一个flag来推断就好。


    在main()函数中加入

    //断网检測

    if(((ETH_ReadPHYRegister(PHY_ADDRESS, PHY_BSR) & PHY_Linked_Status) == 0x00) || (RJ45_COUNTER))
    {
    RJ45_COUNTER = 1;  //掉线标志位

    }

    static err_t Tcpsvrpoll(void *arg, struct tcp_pcb *pcb)
    {

            //加入

    if(RJ45_COUNTER)
    {
    tcp_keepalive(pcb);
    }

    }


  • 相关阅读:
    《痕迹识人,面试读心》培训总结之一
    傲游与视频网站广告之战的思考
    EMLS项目推进思考
    二级证丢失如何找回
    Mathematica 讲座
    泊松方程解法
    Windows核心编程-作业
    Win7多用户同时登陆
    C语言文件操作类型速查
    openMP的一点使用经验
  • 原文地址:https://www.cnblogs.com/llguanli/p/7155225.html
Copyright © 2020-2023  润新知