OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6974|回复: 2

LWIP怎么重新设置ip

[复制链接]

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-6-12
在线时间
0 小时
发表于 2013-6-19 11:16:39 | 显示全部楼层 |阅读模式
我的板子是作为服务器的程序,移植的lwip 我想能够在程序运行过程中重新修改服务器自身的ip地址,可是试了几次还是不行,首先我直接把程序中的  IP4_ADDR(&ipaddr, 192, 168, 1, 18);   //设置网络接口的ip地址
  IP4_ADDR(&netmask, 255, 255, 255, 0); //子网掩码
  IP4_ADDR(&gw, 192, 168, 1, 1); //网关
IP改了,然后 执行tcp_close(iris_pcb);
然后再执行LwIP_Init();
               CMD_init();
结果作为client的PC根本就没办法再连上作为服务器的板子了(不管是新设的ip还是以前老的IP)。请各位大虾指点迷津 O(∩_∩)O谢谢
下面是两个函数的具体代码:
void LwIP_Init( void )
{
  struct ip_addr ipaddr;
  struct ip_addr netmask;
  struct ip_addr gw;

   /*调用LWIP初始化函数,
   初始化网络接口结构体链表、内存池、pbuf结构体*/
   lwip_init();
 
#if LWIP_DHCP   //若使用DHCP协议
  ipaddr.addr = 0;
  netmask.addr = 0;
  gw.addr = 0; 
#else //
/* //by iris 2013.6.6 //
  IP4_ADDR(&ipaddr, 192, 168, 0, 18);   //设置网络接口的ip地址
  IP4_ADDR(&netmask, 255, 255, 255, 0); //子网掩码
  IP4_ADDR(&gw, 192, 168, 0, 1); //网关
*/ //by iris 2013.6.6 //
  IP4_ADDR(&ipaddr, 192, 168, 1, 18);   //设置网络接口的ip地址
  IP4_ADDR(&netmask, 255, 255, 255, 0); //子网掩码
  IP4_ADDR(&gw, 192, 168, 1, 1); //网关


#endif
   
  /*初始化enc28j60与LWIP的接口,参数为网络接口结构体、ip地址、
  子网掩码、网关、网卡信息指针、初始化函数、输入函数*/
  netif_add(&enc28j60, &ipaddr, &netmask, &gw, NULL, &ethernetif_init, &ethernet_input);
 
  /*把enc28j60设置为默认网卡 .*/
  netif_set_default(&enc28j60);


#if LWIP_DHCP   //若使用了DHCP
  /*  Creates a new DHCP client for this interface on the first call.
  Note: you must call dhcp_fine_tmr() and dhcp_coarse_tmr() at
  the predefined regular intervals after starting the client.
  You can peek in the netif->dhcp struct for the actual DHCP status.*/
  dhcp_start(&enc28j60);   //启动DHCP
#endif

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



  struct tcp_pcb *pcb; //定义一个tcp控制块            
 
  /* Create a new TCP control block  */
  pcb = tcp_new();   //给tcp控制块分配内存空间            

  /* Assign to the new pcb a local IP address and a port number */
  /* Using IP_ADDR_ANY allow the pcb to be used by any local interface */
  tcp_bind(pcb, IP_ADDR_ANY, 23);     //把PCB控制块绑定到本机的所有IP地址,端口为23  


  /* Set the connection to the LISTEN state */
  pcb = tcp_listen(pcb);  //监听该端口

  /* Specify the function to be called when a connection is established */
  tcp_accept(pcb, CMD_accept);   //监听的端口接通后调用的函数HelloWorld_accept

  iris_pcb=pcb;  //the mathod is wrong //by iris 2013.6.3
}













正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2013-7-19
在线时间
0 小时
发表于 2013-7-19 14:18:25 | 显示全部楼层
你好,我现在也在做这方便的内容,不知道你的功能实现了没?你是通过什么机制修改IP的呢?是外部有个命令触发吗?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2013-7-19
在线时间
0 小时
发表于 2013-7-19 14:33:49 | 显示全部楼层

你这样修改IP不是把程序写死了吗?

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 18:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表