搜索
bottom↓
回复: 10

域名解析失败

[复制链接]

出0入0汤圆

发表于 2016-12-16 11:38:22 | 显示全部楼层 |阅读模式
各位好,最近测试RT-THREAD 以太网通信部分,
硬件部分STM32F107+LAN8720
OS版本:2.1.0  
LWIP是默认的1.4.1,
现在以太网部分通讯没有问题,但是因为提交数据的时候需要提交到外部服务器,需要按照HTTP POST方式提交数据
设备IP能够正常上网,
牵扯到DNS域名解析,gethostbyname经常返回失败,请问下这个需要去那部分找原因?

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2016-12-16 11:48:33 | 显示全部楼层
gethostbyname,通常不会立刻返回结果的,要用异步调用的方式。 让它去解析,解析成功后调用你的回调函数。如果失败,你可以让它再次解析。

出0入0汤圆

发表于 2016-12-16 12:49:21 | 显示全部楼层
finsh>>list_if()

看下你的DNS地址是多少?
如果是固定IP,LWIP默认的DNS是opendns,是国外的,在国内经常出问题。最好修改为为国内常用的,如114DNS或阿里DNS。

或DHCP由路由分配的。

出0入0汤圆

 楼主| 发表于 2016-12-16 14:15:27 | 显示全部楼层
我自己设置了一个DNS服务器,是从路由器获得之后读取的,默认的是第一个,这样设置两个会有问题吗?
dns server #0: 208.67.222.222
dns server #1: 219.146.1.66

出0入0汤圆

 楼主| 发表于 2016-12-16 14:16:42 | 显示全部楼层
javenreal 发表于 2016-12-16 11:48
gethostbyname,通常不会立刻返回结果的,要用异步调用的方式。 让它去解析,解析成功后调用你的回调函数。 ...

哦,我就是先解析域名,解析成功就用返回的地址connect服务器,解析失败就之计退出,

出0入0汤圆

发表于 2016-12-16 14:30:02 | 显示全部楼层
fenglove 发表于 2016-12-16 14:16
哦,我就是先解析域名,解析成功就用返回的地址connect服务器,解析失败就之计退出, ...

dns_gethostbyname 会返回一个值,返回ERR_OK代表成功。

但是实际上除非这个域名之前就解析过,否则不可能立刻返回OK。

返回ERR_INPROGRESS并不代表错误,而是代表正在处理,等待服务器回复。

可以这样写:

        err = dns_gethostbyname(g_GprsCfg.RemoteAddr, &ip, dns_found, NULL);
        if(err == ERR_OK)
        {
                //立刻成功,这里将状态机设置为继续执行后续工作
        }
        else
        {
                //没有立刻成功,将状态机设置为等待状态,在dns_found回调函数中更新状态机
                set_state(DS_DNS_WAIT, 60);
        }

出0入0汤圆

发表于 2016-12-16 14:32:05 | 显示全部楼层
lwip的代码注释里面标注的还是很清楚的

/**
* Resolve a hostname (string) into an IP address.
* NON-BLOCKING callback version for use with raw API!!!
*
* Returns immediately with one of err_t return codes:
* - ERR_OK if hostname is a valid IP address string or the host
*   name is already in the local names table.
* - ERR_INPROGRESS enqueue a request to be sent to the DNS server
*   for resolution if no errors are present.
* - ERR_ARG: dns client not initialized or invalid hostname
*
* @param hostname the hostname that is to be queried
* @param addr pointer to a ip_addr_t where to store the address if it is already
*             cached in the dns_table (only valid if ERR_OK is returned!)
* @param found a callback function to be called on success, failure or timeout (only if
*              ERR_INPROGRESS is returned!)
* @param callback_arg argument to pass to the callback function
* @return a err_t return code.
*/

出0入0汤圆

 楼主| 发表于 2016-12-16 14:45:30 | 显示全部楼层
javenreal 发表于 2016-12-16 14:32
lwip的代码注释里面标注的还是很清楚的

/**

哦哦,好的,谢谢javenreal

出0入0汤圆

发表于 2016-12-16 17:11:17 | 显示全部楼层
fenglove 发表于 2016-12-16 14:15
我自己设置了一个DNS服务器,是从路由器获得之后读取的,默认的是第一个,这样设置两个会有问题吗?
dns se ...

默认使用#0,建议修改为 114.114.114.114或 (223.5.5.5 / 223.6.6.6) http://alidns.com/

出0入0汤圆

 楼主| 发表于 2016-12-16 17:20:11 | 显示全部楼层
aozima 发表于 2016-12-16 17:11
默认使用#0,建议修改为 114.114.114.114或 (223.5.5.5 / 223.6.6.6) http://alidns.com/

好的。谢谢

出0入0汤圆

发表于 2016-12-16 17:55:05 | 显示全部楼层
查一下路由器是否设置有问题。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 11:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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