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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Naisu_kun/article/details/88572906

目的

前面讲WebServer的时候都是通过ip地址去访问的,如果想像一般上网那样输入域名(www.baidu.comwww.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

猜你喜欢

转载自blog.csdn.net/Naisu_kun/article/details/88572906