首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

w5100实现dns解析功能

w5100实现dns解析功能

环境:
主机:WIN7
开发环境:MDK4.72
MCU:STM32F103ZE


说明:
在项目中我要搭建一个服务器,服务器域名固定,但ip是动态的.每一个带w5100的板子需要解析dns,获得服务器ip.


dns协议格式:
参考链接:http://blog.csdn.net/wangyifei0822/article/details/2316857


源代码:
dns请求:

[cpp] view plaincopy

  • <span style="font-family:SimHei;font-size:18px;">/*********************************************************************
  • *                           dns请求
  • *参数:socket:端口
  • *     url:目标url
  • *     dns_ip:dns服务器ip
  • **********************************************************************/

  • void inf_w5100_dns_query(uint8_t socket,char *url,uint8_t *dns_ip)  
  • {  
  •     uint8_t data[100] = {0};  
  •     uint8_t i = 0;  
  •     uint8_t j = 0;  
  •     uint8_t str_len = 0;  
  •     uint8_t index_num = 0;  

  •     //dns标识字段
  •     data[i++] = (DNS_ID >> 8) & 0xff;  
  •     data[i++] = DNS_ID & 0xff;  
  •     //dns头
  •     data[i++] = 0x01;  
  •     data[i++] = 0x00;  
  •     data[i++] = 0x00;  
  •     data[i++] = 0x01;  
  •     data[i++] = 0x00;  
  •     data[i++] = 0x00;  
  •     data[i++] = 0x00;  
  •     data[i++] = 0x00;  
  •     data[i++] = 0x00;  
  •     data[i++] = 0x00;  
  •     //正文
  •     j = 0;  
  •     str_len = 0;  
  •     index_num = i++;  
  •     while (1)  
  •     {  
  •         //判断是否到字符末尾
  •         if (url[j] == '\0')  
  •         {  
  •             data[index_num] = str_len;  
  •             data[i++] = 0x00;  
  •             break;  
  •         }  

  •         if (url[j] != '.')  
  •         {  
  •             data[i++] = url[j];  
  •             str_len++;  
  •         }  
  •         else
  •         {  
  •             //字符长度
  •             data[index_num] = str_len;  
  •             str_len = 0;  
  •             index_num = i++;  
  •         }  

  •         j++;  
  •     }  
  •     //dns尾
  •     data[i++] = 0x00;  
  •     data[i++] = 0x01;  
  •     data[i++] = 0x00;  
  •     data[i++] = 0x01;  

  •     //发送
  •     inf_w5100_write_data(socket, data, i,dns_ip,53);  
  • }</span>  
继承事业,薪火相传
返回列表