- UID
- 1029342
- 性别
- 男
|
环境:
主机: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>
|
|