使用Arduino开发ESP32(10):DNSServer使用演示与说明

文章目录

  • 目的
  • 使用演示
  • 常用方法
  • 总结

目的

前面讲WebServer的时候都是通过ip地址去访问的,如果想像一般上网那样输入域名(www.baidu.comwww.taobao.com等)访问的话就需要用到DNSServer了。本文对
Arduino core for the ESP32中DNSServer使用进行简单介绍。

使用DNSServer必须使设备处于AP模式下,在非AP模式下想实现同样功能的话请参考mDNS
mDNS可以在非AP模式下使用但也有局限,局域网中其它设备也必须开启mDNS服务互相间才能通过域名访问。

使用演示

DNSServer使用步骤如下:

  • 引入相应库#include
  • 声明DNSServer对象;
  • 使用start()方法启动DNS服务器;
  • 使用processNextRequest()方法处理来自客户端的请求;
#include 
#include  //引入相应库
#include 

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();
}

使用Arduino开发ESP32(10):DNSServer使用演示与说明_第1张图片

常用方法

  • 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

你可能感兴趣的:(ESP32相关)