广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    单片机LWIP协议中客户端无法连接到服务器问题

    来源:网络收集  点击:  时间:2025-02-19
    【导读】:
    现在大多的单片机使用LwIP协议来实现互联网功能,但是在刚刚学习时发现有个问题就是,LwIP协议用作服务器端时可以成功执行建立Socket,绑定端口号以及启动侦听等功能。但是用作客户端时,无法连接到指定的服务器端。其实问题主要出在时序上,由于LwIP初始化需要一定的时间而且这个过程与主程序是并列进行的。 LwIP协议初始化主要完成设备 IP的指定(如果连接到路由器以及运行DHCP服务,还要等待路由器为设备分配 IP)、网关等认证。 由于单片机做服务器端的初始化与等待连接的客户端无关,所以可以在LwIP未初始化完成时便可以启动侦听服务,但也要等LwIP初始化完成才可以接收客户端连接。 但单片机做客户端时,需要向服务器端发起连接,所以在LwIP协议没有初始化完成时是不可能发起连接的。所以解决问题要在LwIP初始化完成后再运行客户端初始化和发起连接。工具/原料moreKeil TCPUDP测试工具STM32F107 + DM9161AEP 硬件平台路由器及PC方法/步骤1/6分步阅读

    找到main程序中的LwIP_Init函数,并右键搜索定义(Definition)

    2/6

    由于我用的路由器加DHCP服务,所以用crtl + f 查找“LWIP_DHCP”,找到如图所示的函数段。

    3/6

    再往下找到诸如“IPaddress = netif.ip_addr.addr;”语句的地方,这句话意思就是将分配好的IP赋值给IPaddress 变量,即表示 LwIP初始化完成,系统已经得到路由器DHCP分配到的IP地址,在后面即可添加客户端定义语句。我的客户端定义是写在“Ehome_init”函数中的。

    4/6

    在Ehome_init函数内,同时定义了服务器端与客户端,而且下载到硬件平台都初始化运行成功。

    IP4_ADDR(Server_ipaddr,192,168,1,112);

    为所要连接的服务器地址,即我的 PC地址。

    tcp_bind(pcb_client, IP_ADDR_ANY, 8091);

    为绑定客户端socket的端口,为测试方便我绑定了8091端口,其实不绑定也可。

    tcp_connect(pcb_client, Server_ipaddr, EHOME_SERVER_PORT, Ehome_Client_Connected)

    既为客户端连接到服务器函数,其中pcb_client为客户端socket,Server_ipaddr为服务器IP,EHOME_SERVER_PORT为所要连接的服务器端口号,这里为8090(可以直接写数字“8090”),Ehome_Client_Connected为连接成功后调取的函数。

    5/6

    在电脑上用TCPUDP测试工具建立TCP服务器端,端口为8090(单片机程序中设定所要连接到的服务器端口号),然后启动服务器。

    6/6

    将前面写好的程序编译连接并下载到单片机内运行,可以看到服务器端自动接受到单片机客户端的连接,并成功接受到信息。

    LWIPSTM32F107DM9161AEP客户端
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_1241398.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-07 02:04:12  耗时:0.029
    0.0292s