完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我是新手,最近在学习关于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个回答
|
|
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(); |
|
|
|
谢谢版主您的回答,我用您这个的程序在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 |
|
|
|
|
|
|
|
搭车问个问题额 LWIP如何实现双IP功能额?
调了2次 netif_add, netif_set_default, netif_set_up,如果是同网段的IP均可以ping通 但是如果设置的是不同网段的IP 则会 时通时不通 。 求解 应该改动什么地方才可以实现 单网卡 双IP的功能啊? |
|
|
|
那我设置断点运行到
void dns_serverFound(const char *name, struct ip_addr *ipaddr, void *arg) 这个函数的时候,发现ipaddr的地址为0x00000000,是不是问题出在这里呢?然后就没办法得到正确的IP地址? 我是在你的那个工程main.c上添加的这些,就不知道问题出在哪里了 |
|
|
|
|
|
|
|
谢谢版主的帮忙,原来我们路由器绑定了IP地址,没办法连接网络。换了一个路由器就好了
|
|
|
|
这个我也不会,帮不上你忙,呵呵。
|
|
|
|
楼主 有没有实现开发板ping服务器的功能啊
|
|
|
|
楼主到底是怎么解决的啊,现在遇到和楼主一样的问题了,路由器绑定Ip是怎么回???
|
|
|
|
楼主你好 ,我参考你的帖子,绑定之后解析出来的IP地址对,
if ((localtime - DNSTimer) >= TCP_TMR_INTERVAL) { DNSTimer = localtime; dns_tmr(); } void dns_serverFound(const char *name, struct ip_addr *ipaddr, void *arg) { unsigned char ip[4]; DNS_Addr = *ipaddr; ip[0] = DNS_Addr.addr>>24; ip[1] = DNS_Addr.addr>>16; ip[2] = DNS_Addr.addr>>8; ip[3] = DNS_Addr.addr; printf("rn%d.%d.%d.%drn",ip[3], ip[2], ip[1], ip[0]); } 解析出来的是56.231.0.32.而我的是192.168.1.6 求解答 |
|
|
|
你是要实现DNS还是DHCP功能呢?我看你的问题应该是想获取动态IP吧?动态IP的话你就把DHCP的设置为1就可以了
|
|
|
|
忧忧,你的DNS问题解决了吗?
|
|
|
|
请问8楼,怎样才能获取路由器WAN口的公网IP?
|
|
|
|
百度直接输入IP,应该就是公网的IP了吧?
|
|
|
|
域名对应多个ip?
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2571 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2366 浏览 5 评论
3214 浏览 3 评论
2840 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2793 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
671浏览 1评论
907浏览 0评论
1029浏览 0评论
673浏览 0评论
502浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 13:19 , Processed in 1.428585 second(s), Total 106, Slave 90 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号