天线|RF射频
直播中

陈鹏

8年用户 222经验值
私信 关注
[问答]

LWIP的DNS得不到正确的结果

我是新手,最近在学习关于LWIP方面的东西,用了xiaoyan版主分享的LWIP例程可以实现TCP服务器,TCP客户端,UDP服务器,UDP客户端,WEBSEVER等功能,现在还想加入一些DNS方面东西
在原来的程序里简单地加入
在op.H里配置了LWC_DNS   1
ip_addr_t result;
static void my_found(const char *name, ip_addr_t *ipaddr, void *arg)
{
uint8_t ip[4];
result = *ipaddr;

ip[0] = result.addr>>24;
ip[1] = result.addr>>16;
ip[2] = result.addr>>8;
ip[3] = result.addr;

printf("%d.%d.%d.%d",ip[3], ip[2], ip[1], ip[0]);

}
int main(void)
{
char hostname[]="www.baidu.com";
ip_addr_t *addr;
lwip_init();
dns_gethostbyname(hostname,addr,my_found,NULL);
while(1)
{
还有其他无关函数;
}
}
简单的调用dns_gethostbyname得不到正确的结果不知道为什么
在 dns_gethostbyname 设置断点,看到addr的地址是0x00000001是不是有问题啊?
不知道哪位有做过相关的实验或者测试能够给指导一下

回帖(16)

寇亦青

2020-3-9 07:12:34
ip_addr_t *addr;你这个addr是个野指针。我刚刚测试了是可以得到主机名对应的IP的。
struct ip_addr DNS_Addr;
dns_gethostbyname("www.openedv.com",&DNS_Addr,dns_serverFound,NULL);
void dns_serverFound(const char *name, struct ip_addr *ipaddr, void *arg)
{
u32 ip=0;
  if ((ipaddr) && (ipaddr->addr))
  {
ip = ipaddr->addr;
printf("IP地址%ld,%ld,%ld,%ldrn",(ip&0x000000ff),(ip&0x0000ff00)>>8,(ip&0x00ff0000)>>16,(ip&0xff000000)>>24);
 
  }
  else{
}
}
注意while中必须执行
LWIP_Polling();
举报

杜美娜

2020-3-9 07:24:02
谢谢版主您的回答,我用您这个的程序在while(1)里面有调用LWIP_Polling();这个函数里面我添加了    if(timer_expired(&last_dns_time,DNS_TMR_INTERVAL/CLOCKTICKS_PER_MS))
  {
 dns_tmr();
  } 
但是还是没有打印出来IP值,
我用单步执行追踪dns_gethostbyname("www.openedv.com",&DNS_Addr,dns_serverFound,NULL);这个函数的时候是返回ERR_INPROGRESS
运行到
void dns_serverFound(const char *name, struct ip_addr *ipaddr, void *arg)
这个函数的时候,发现ipaddr的地址为0x00000000
返回的值的一直是错的,
这个程序只是在您的过程里改动的
难道还需要在dns.c或者dns.h初始化里改动什么吗?
源函数:
typedef void (*dns_found_callback)(const char *name, ip_addr_t *ipaddr, void *callback_arg);//dns.h
dns_gethostbyname(const char *hostname, ip_addr_t *addr, dns_found_callback found, void *callback_arg)//dns.c
举报

李兆存

2020-3-9 07:35:40
“难道还需要在dns.c或者dns.h初始化里改动什么吗?”
不需要改动的。
举报

王凯

2020-3-9 07:47:19
搭车问个问题额  LWIP如何实现双IP功能额?
调了2次 netif_add,  netif_set_default, netif_set_up,如果是同网段的IP均可以ping通
但是如果设置的是不同网段的IP 则会 时通时不通 。
求解 应该改动什么地方才可以实现 单网卡 双IP的功能啊?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分