OpenEdv-开源电子网

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

LWIP DHCP

[复制链接]

48

主题

167

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2013-6-27
在线时间
17 小时
发表于 2013-7-25 12:41:52 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-7-25 13:00:22 | 显示全部楼层
不是吧.不过我没用过LWIP,呵呵.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

48

主题

167

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2013-6-27
在线时间
17 小时
 楼主| 发表于 2013-7-25 16:19:27 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
谢。你也搞一搞啊,把教程里的uIP换成LwIP搞起啊。搞点DHCP,域名解析之类的,不错的节奏哦。
回复 支持 反对

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2013-7-25 16:39:23 | 显示全部楼层
是的,DHCP是基于UDP的协议
于20150522停用该账号:http://www.microstar.club
回复 支持 反对

使用道具 举报

48

主题

167

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2013-6-27
在线时间
17 小时
 楼主| 发表于 2013-7-25 18:28:00 | 显示全部楼层
回复【4楼】styleno1:
---------------------------------
那我用了DHCP,下面的部分都要把tcp的改成udp咯。
void tcp_client_init(void)
{
struct tcp_pcb* client_pcb;
struct tcp_client_app_arg* app_arg;
printf("tcp client inti\n");
destip.addr = (uint32_t)192+(168<<8)+(0<<16)+(105<<24);

client_pcb = tcp_new();
if(client_pcb != NULL)
{
tcp_arg(client_pcb, mem_calloc(sizeof(struct tcp_client_app_arg), 1));   
app_arg = client_pcb->callback_arg;
app_arg->app_state = CLIENT_WAITING_FOR_CONNECTION;
tcp_connect(client_pcb, &destip, 2200, tcp_client_connected);
}
else
{
printf("tcp alloc failed\n");
}
}

可是我又在107的例程里看到了这样东西 ,又作何解呢

void client_init(void)
{
   struct udp_pcb *upcb;
   struct pbuf *p;
                                  
   upcb = udp_new();   
   udp_connect(upcb, IP_ADDR_BROADCAST, UDP_SERVER_PORT);
   p = pbuf_alloc(PBUF_TRANSPORT, 0, BUF_RAM);
   udp_send(upcb, p);   
   udp_disconnect(upcb);  
   udp_bind(upcb, IP_ADDR_ANY, UDP_CLIENT_PORT);
   udp_recv(upcb, udp_client_callback, NULL);

   /* Free the p buffer */
   pbuf_free(p);
  
}

void udp_client_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port)
{
  struct tcp_pcb *pcb;
  __IO uint8_t iptab[4];
  uint8_t iptxt[20];

  /* Read the Server's IP address */
  iptab[0] = (uint8_t)((uint32_t)(addr->addr) >> 24);  
  iptab[1] = (uint8_t)((uint32_t)(addr->addr) >> 16);
  iptab[2] = (uint8_t)((uint32_t)(addr->addr) >> 8);
  iptab[3] = (uint8_t)((uint32_t)(addr->addr));

  sprintf((char*)iptxt, "is: %d.%d.%d.%d     ", iptab[3], iptab[2], iptab[1], iptab[0]);

  LCD_DisplayStringLine(Line3, "The server's IP add.");
  LCD_DisplayStringLine(Line4, iptxt);
  pcb = tcp_new();
  tcp_bind(pcb, IP_ADDR_ANY, TCP_PORT);
  tcp_connect(pcb, addr, TCP_PORT, tcp_client_connected);
  pbuf_free(p);
}
回复 支持 反对

使用道具 举报

48

主题

167

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2013-6-27
在线时间
17 小时
 楼主| 发表于 2013-7-25 18:41:54 | 显示全部楼层
你们帮看看,把server功能忽略,只用client时,怎么改成给板子由路由自动分配IP。这个client功能是这样用了,先打开TCP&UDP测试工具,建立一个服务器(192.168.0.105:2200,我的电脑IP),然后启动服务器,reset开发板,就连上了。我试了一下用DHCP,不着门道,求助。
回复 支持 反对

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2013-7-25 20:14:39 | 显示全部楼层
有个路由器做服务器比较好调试,电脑也在同一个局域网,可以收到广播的报文内容,这样可以看到发出的数据。
于20150522停用该账号:http://www.microstar.club
回复 支持 反对

使用道具 举报

头像被屏蔽

88

主题

231

帖子

2

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-11
在线时间
40 小时
发表于 2013-7-25 21:13:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

48

主题

167

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2013-6-27
在线时间
17 小时
 楼主| 发表于 2013-7-25 22:16:00 | 显示全部楼层
回复【8楼】nonplus:
---------------------------------
额明白了,
回复 支持 反对

使用道具 举报

48

主题

167

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2013-6-27
在线时间
17 小时
 楼主| 发表于 2013-7-26 10:15:15 | 显示全部楼层
回复【8楼】nonplus:
---------------------------------
求同时使用client,server,udp例程,和测试操作过程
回复 支持 反对

使用道具 举报

头像被屏蔽

88

主题

231

帖子

2

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-11
在线时间
40 小时
发表于 2013-7-26 14:29:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

48

主题

167

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2013-6-27
在线时间
17 小时
 楼主| 发表于 2013-7-26 14:45:11 | 显示全部楼层
好像我这个也行呢,没试过而已,试试
回复 支持 反对

使用道具 举报

48

主题

167

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2013-6-27
在线时间
17 小时
 楼主| 发表于 2013-8-2 11:18:02 | 显示全部楼层
回复【11楼】nonplus:
---------------------------------
之前没加DHCP,能成功的连上,无论是用作CLIENT还是SERVER都能通过路由和PC连上,两个功能同时运行也可以,用的TCP&UDP测试工具。 
现在在原代码的基础上加上DHCP功能(代码改动很小,client和server相关的代码就没改,只#define LWIP_DHCP 1和在netconfig.c里加上dhcp_start), 
现在能成功分配IP,能够PING通,用做server时,能成功连上,但是,做client时,连不上了。tcp_connect内调用的tcp_enqueue的返回值也是ERR_OK,并成功调用tcp_output。现在是问题出在哪儿都不知道。
回复 支持 反对

使用道具 举报

头像被屏蔽

88

主题

231

帖子

2

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-11
在线时间
40 小时
发表于 2013-8-6 09:31:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

48

主题

167

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2013-6-27
在线时间
17 小时
 楼主| 发表于 2013-8-6 20:11:01 | 显示全部楼层
回复【14楼】nonplus:
---------------------------------
我的tcp_connect的返回值都是ERR_OK了,可还是连不上
回复 支持 反对

使用道具 举报

头像被屏蔽

88

主题

231

帖子

2

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-11
在线时间
40 小时
发表于 2013-8-7 00:10:45 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

48

主题

167

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2013-6-27
在线时间
17 小时
 楼主| 发表于 2013-8-7 16:06:09 | 显示全部楼层
回复【16楼】nonplus:
---------------------------------
知道tcp_connect是立即返回的,但函数解释给的“ERR_OK :当SYN被正确地访问时,即连接成功建立”。用DEBUG看过,没找出问题来,也许就是找不来问题。把TCP_DEBUG,TCP_OUTPUT_DEBUG打开,只有这个异常,tcp_output: nothing to send。
测过这个demo的稳定性,用的是TCP&UDP测试工具测的,连上后,只有在接收区满后,就会断开,清空后,必须RESET 开发板才可以再连上。
如果是不够稳定,至少会连上一次再断开什么的,但是打开DHCP功能后,就根本没出现过连上。
能不能具体说说原因呢,这个问题我在国外的网站上也见别人问过,可也没人给出解决的方法。你是唯一一个觉得自己抓住了问题的关键的人。
求指导。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2012-7-19
在线时间
0 小时
发表于 2013-8-7 16:47:59 | 显示全部楼层
DHCP是基于UDP的服务
建议楼主看看tcp/ip详解 卷一:协议。
To be
回复 支持 反对

使用道具 举报

头像被屏蔽

88

主题

231

帖子

2

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-11
在线时间
40 小时
发表于 2013-8-7 17:15:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

88

主题

231

帖子

2

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-11
在线时间
40 小时
发表于 2013-8-7 17:16:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

48

主题

167

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2013-6-27
在线时间
17 小时
 楼主| 发表于 2013-8-7 17:44:19 | 显示全部楼层
回复【18楼】shangshipei:
---------------------------------
明白DHCP是基于UDP,只是整个DHCP过程是基于UDP的,一旦IP分配成功后,你用什么方式进行数据传输是没有影响的吧
回复 支持 反对

使用道具 举报

48

主题

167

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2013-6-27
在线时间
17 小时
 楼主| 发表于 2013-8-7 17:52:45 | 显示全部楼层
回复【20楼】nonplus:
---------------------------------
明白DHCP是基于UDP,只是整个DHCP过程是基于UDP的,一旦我IP分配成功后,选择什么进行数据传输是没有影响的吧。
RAW API的资料的确少。我也把这个放着一段时间了,有时间再看看吧。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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