LwIP DHCP 功能实现

[复制链接]
 楼主| can123dao 发表于 2013-7-27 09:38 | 显示全部楼层 |阅读模式
现有一个路由,一个STM32开发板,一台PC。已实现将开发板分别或同时做为SERVER,CLIENT和PC通信,但IP地址都是通过预先配置好的。现在想在开发板做CLIENT时,使用路由做DHCP server给板子自动分配IP。分配不成功,不知道怎么回事,路由已经开启了DHCP功能。有人做过类似的能讲一下或分享一下么。
  1. void LwIP_Init( void )
  2. {
  3.   struct netif enc28j60;
  4.   struct ip_addr ipaddr;
  5.   struct ip_addr netmask;
  6.   struct ip_addr gw;
  7.   int i,j,cnt;

  8.    /*调用LWIP初始化函数,
  9.    初始化网络接口结构体链表、内存池、pbuf结构体,启动协议栈管理进程*/
  10.    lwip_init();              
  11. #if LWIP_DHCP                                   //若使用DHCP协议
  12.   ipaddr.addr = 0;
  13.   netmask.addr = 0;
  14.   gw.addr = 0;
  15.   for(i = 0; i < 5; i++)
  16.   {
  17.       dhcp_start(&enc28j60);
  18.     IP4_ADDR(&ipaddr,0,0,0,0);
  19.     for(cnt = 0; (cnt < 10) && (ipaddr.addr == 0); cnt ++)
  20.     {
  21.         ipaddr.addr = enc28j60.ip_addr.addr;
  22.         for(j = 0; j<100000; j++);
  23.     }
  24.     dhcp_stop(&enc28j60);
  25.     if(ipaddr.addr != 0)
  26.     {
  27.         break;
  28.     }
  29.     ipaddr.addr = enc28j60.ip_addr.addr;
  30.     netmask.addr = enc28j60.netmask.addr;
  31.     gw.addr    = enc28j60.gw.addr;
  32.   }

  33. #else                                        //
  34.   IP4_ADDR(&ipaddr, 192, 168, 0, 16);          //设置网络接口的ip地址
  35.   IP4_ADDR(&netmask, 255, 255, 255, 0);        //子网掩码
  36.   IP4_ADDR(&gw, 192, 168, 0, 1);            //网关
  37. #endif
  38.    
  39.   /*初始化enc28j60与LWIP的接口,参数为网络接口结构体、ip地址、
  40.   子网掩码、网关、网卡信息指针、初始化函数、输入函数*/
  41.   netif_add(&enc28j60, &ipaddr, &netmask, &gw, NULL, &ethernetif_init, &ethernet_input);
  42.   
  43.   /*把enc28j60设置为默认网卡 .*/
  44.   netif_set_default(&enc28j60);

  45.   /*  When the netif is fully configured this function must be called.*/
  46.   netif_set_up(&enc28j60); //使能enc28j60接口

  47. }
 楼主| can123dao 发表于 2013-7-28 10:49 | 显示全部楼层
自己顶啊 ,来人救命啊
duxinlng 发表于 2015-11-11 17:33 | 显示全部楼层
还没搞定吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

114

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部