ESP8266_DNS域名解析

1、DNS域名解析espconn_gethostbyname、DNS域名解析完的回调函数

void ICACHE_FLASH_ATTR DNS_callback(const char *name,ip_addr_t *ipaddr,void* arg)

espconn_gethostbyname(&ST_NetCon,RATION_SITE,&site_ip,DNS_callback);

espconn_gethostbyname第三个参数,并不是存解析后的IP地址,而是在回调函数的参数ipaddr里;

回调函数是有一定格式的,要在DNS的回调里利用ipaddr得到解析出的IP地址,然后赋值到arg的网络传输结构体的remote_ip中,利用arg来建立TCP连接,用之前的ST_NetCon是无法建立TCP连接的;


 

2、关键代码

//初始化TCP通信,端口8266;
void ICACHE_FLASH_ATTR TCP_port8266_init()
{
	ST_NetCon.type = ESPCONN_TCP;						    //通信协议:TCP

	ST_NetCon.proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp));// 申请内存
	ST_NetCon.proto.tcp->local_port  = 8266 ;				// 设置本地端口
	ST_NetCon.proto.tcp->remote_port = 80;

	espconn_gethostbyname(&ST_NetCon,RATION_SITE,&site_ip,DNS_callback);

	espconn_regist_connectcb(&ST_NetCon,TCP_connect_callback);	//建立TCP连接后回调
	espconn_regist_reconcb(&ST_NetCon,TCP_reconncect_callback);	//TCP异常断开连接

}

//解析完域名的回调函数
void ICACHE_FLASH_ATTR DNS_callback(const char	*name,ip_addr_t	*ipaddr,void* arg)
{
	struct espconn * t_arg = arg;

	if(ipaddr == NULL){
		os_printf("DNS FAIL!\n");			//DNS解析失败
	}else{
		if(ipaddr->addr != 0){
			os_printf("\nDNS OK!\n");			//DNS解析成功

			//site_ip.addr = ipaddr->addr;
			os_printf("%d,%d\n",ipaddr->addr,site_ip.addr);

			os_memcpy(t_arg->proto.tcp->remote_ip,&ipaddr->addr,4);

			os_printf("www.rationmcu.com IP = %d.%d.%d.%d\n",
					*((u8*)&ipaddr->addr),	*((u8*)&ipaddr->addr+1),
					*((u8*)&ipaddr->addr+2),*((u8*)&ipaddr->addr+3));

			//ESP8266作为客户端,是向服务器申请TCP连接
			espconn_connect(t_arg);
		}
	}
}

3、结果

4、DNS的IP地址

DNS服务器解析域名的IP,DNS也有自己的IP地址,这个IP地址是出厂设置好的, 也可以自行修改;

刚找了一圈,SDK里只有espconn_dns_setserver没有手册里的getserver呀,这样的发,,咱也不知道里面DNS服务器的IP,咱也不改了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值