上一篇:
使用W5500时,如果要连接的是域名,则连接TCP服务器前将要域名转成IP再进行连接,这时候就要用到DNS功能。
1、导入DNS相关的官方的ioLibrary库文件:
dns.c、dns.h
具体参考前面的文章。
2、首先要确保W5500已经分配好网络,其所在区域网内有DNS服务器
定义DNS服务器地址和要解析的域名:
//Default Network Configuration
wiz_NetInfo gWIZNETINFO = {
.mac = {0x00, 0x08, 0xdc,0x00, 0xab, 0xcd},
.ip = {192, 168, 1, 123},
.sn = {255,255,255,0},
.gw = {192, 168, 1, 1},
.dns = {114,114,114,114},
.dhcp = NETINFO_DHCP,
};
uint8_t DNS_2nd[4] = {8, 8, 4, 4}; // Secondary DNS server IP
uint8_t Domain_name[] = "www.baidu.com"; // for Example domain name
uint8_t Domain_IP[4] = {0, }; // Translated IP address by DNS
3、解析:应该在网络初始化完成后,再调用该函数。
void dns_test(void)
{
int8_t ret;
printf("\r\n=== DNS Client Example ===============\r\n");
printf("> DNS 1st : %d.%d.%d.%d\r\n", gWIZNETINFO.dns[0], gWIZNETINFO.dns[1], gWIZNETINFO.dns[2], gWIZNETINFO.dns[3]);
printf("> DNS 2nd : %d.%d.%d.%d\r\n", DNS_2nd[0], DNS_2nd[1], DNS_2nd[2], DNS_2nd[3]);
printf("======================================\r\n");
printf("> Example Domain Name : %s\r\n", Domain_name);
/* DNS client initialization */
DNS_init(SOCK_DNS, gDATABUF);
/* DNS procssing */
if ((ret = DNS_run(gWIZNETINFO.dns, Domain_name, Domain_IP)) > 0) // try to 1st DNS
{
printf("> 1st DNS Reponsed\r\n");
}
else if ((ret != -1) && ((ret = DNS_run(DNS_2nd, Domain_name, Domain_IP))>0)) // retry to 2nd DNS
{
printf("> 2nd DNS Reponsed\r\n");
}
else if(ret == -1)
{
printf("> MAX_DOMAIN_NAME is too small. Should be redefined it.\r\n");
}
else
{
printf("> DNS Failed\r\n");
}
if(ret > 0)
{
printf("> Translated %s to %d.%d.%d.%d\r\n",Domain_name,Domain_IP[0],Domain_IP[1],Domain_IP[2],Domain_IP[3]);
//
// TO DO
//
}
}
4、调用完成后,解析到的IP会被放在Domain_IP数组内。随后连接该IP,即可连接上对应域名的服务器了。
下一篇:
W5500以太网控制器芯片(五):实现FTP客户端