域名解析失败
各位好,最近测试RT-THREAD 以太网通信部分,硬件部分STM32F107+LAN8720
OS版本:2.1.0
LWIP是默认的1.4.1,
现在以太网部分通讯没有问题,但是因为提交数据的时候需要提交到外部服务器,需要按照HTTP POST方式提交数据
设备IP能够正常上网,
牵扯到DNS域名解析,gethostbyname经常返回失败,请问下这个需要去那部分找原因? gethostbyname,通常不会立刻返回结果的,要用异步调用的方式。 让它去解析,解析成功后调用你的回调函数。如果失败,你可以让它再次解析。 finsh>>list_if()
看下你的DNS地址是多少?
如果是固定IP,LWIP默认的DNS是opendns,是国外的,在国内经常出问题。最好修改为为国内常用的,如114DNS或阿里DNS。
或DHCP由路由分配的。
我自己设置了一个DNS服务器,是从路由器获得之后读取的,默认的是第一个,这样设置两个会有问题吗?
dns server #0: 208.67.222.222
dns server #1: 219.146.1.66 javenreal 发表于 2016-12-16 11:48
gethostbyname,通常不会立刻返回结果的,要用异步调用的方式。 让它去解析,解析成功后调用你的回调函数。 ...
哦,我就是先解析域名,解析成功就用返回的地址connect服务器,解析失败就之计退出, 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);
} 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.
*/ javenreal 发表于 2016-12-16 14:32
lwip的代码注释里面标注的还是很清楚的
/**
哦哦,好的,谢谢javenreal 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/ aozima 发表于 2016-12-16 17:11
默认使用#0,建议修改为 114.114.114.114或 (223.5.5.5 / 223.6.6.6) http://alidns.com/
好的。谢谢 查一下路由器是否设置有问题。
页:
[1]