版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
目的
前面讲WebServer
的时候都是通过ip地址去访问的,如果想像一般上网那样输入域名(www.baidu.com
、www.taobao.com
等)访问的话就需要用到DNSServer
了。本文对
Arduino core for the ESP32中DNSServer
使用进行简单介绍。
使用DNSServer
必须使设备处于AP
模式下,在非AP
模式下想实现同样功能的话请参考mDNS
。
mDNS
可以在非AP
模式下使用但也有局限,局域网中其它设备也必须开启mDNS
服务互相间才能通过域名访问。
使用演示
DNSServer
使用步骤如下:
- 引入相应库
#include <DNSServer.h>
; - 声明
DNSServer
对象; - 使用
start()
方法启动DNS服务器; - 使用
processNextRequest()
方法处理来自客户端的请求;
#include <WiFi.h>
#include <DNSServer.h> //引入相应库
#include <WebServer.h>
IPAddress local_IP(192, 168, 4, 1); //IP地址
IPAddress gateway(192, 168, 4, 1); //网关地址
IPAddress subnet(255, 255, 255, 0); //子网掩码
const byte DNS_PORT = 53; //DNS服务端口号,一般为53
DNSServer dnsserver; //声明DNSServer对象
WebServer webserver(80);
void handleRoot() //回调函数
{
webserver.send(200, "text/plain", "通过域名访问的根页面");
}
void handleP1() //回调函数
{
webserver.send(200, "text/plain", "通过域名访问的p1页面");
}
void setup()
{
WiFi.mode(WIFI_AP); //设置为AP模式
WiFi.softAPConfig(local_IP, gateway, subnet);
WiFi.softAP("DNSServer example");
webserver.on("/", handleRoot);
webserver.on("/p1", handleP1);
dnsserver.start(DNS_PORT, "example.com", local_IP); //启动DNS服务,example.com即为注册的域名
webserver.begin();
}
void loop()
{
dnsserver.processNextRequest(); //处理来自客户端的请求
webserver.handleClient();
}
常用方法
void processNextRequest()
处理来自客户端的请求;bool start(const uint16_t &port, const String &domainName, const IPAddress &resolvedIP);
启动DNSServer,分别需要填入端口号、域名、IP,域名可以填写*
表示所有域名都会被跳转至这里;void stop()
停止DNSServer;
总结
DNSServer
相对比较简单,这里也没其它更多可以说的了,更多内容可以参考如下:
https://github.com/espressif/arduino-esp32/tree/master/libraries/DNSServer