W5500以太网控制器芯片:实现DNS功能
Posted zhangfls
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了W5500以太网控制器芯片:实现DNS功能相关的知识,希望对你有一定的参考价值。
上一篇:
使用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以太网控制器芯片:实现DNS功能的主要内容,如果未能解决你的问题,请参考以下文章
如何利用原生JS+AJAX在W5500的WEB界面上面实现按键控制单片机IO口
SWA2G422&485JK2G基础篇: STM32+W5500(以太网)实现MQTT通信控制,485/422透传通信
SWA2G422&485JK2G基础篇: 手机APP通过APMACBind方式绑定W5500(以太网)设备,实现MQTT远程通信控制