一、介绍UDP通信
UDP:无需建立连接就可以发数据。
HTTP:需要双方建立连接才能发数据。
详细介绍链接:
https://blog.csdn.net/qq_39300332/article/details/79139229
二、测试UDP通信
先举个例子,什么是UDP通信呢?
我们习惯使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
我们在使用esp32开发板测试一下UDP通信。
1、下载网络调试助手NetAssist。图标长这样(哈哈哈,感觉长得好奇怪):
首先我们点开它看一下,记住IP地址和端口号,一会要用它。注意:之后ESP32连接的网络和电脑使用的网络在同一WiFi下。
2、直接上代码测试下。
#include <WiFi.h>
#include <WiFiUdp.h> //引用以使用UDP
const char *ssid = "***";
const char *password = "***";
WiFiUDP Udp; //创建UDP对象
unsigned int localUdpPort = 8080; //本地端口号
void setup()
{
Serial.begin(115200);
Serial.println();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (!WiFi.isConnected())
{
delay(500);
Serial.print(".");
}
Serial.println("Connected");
Serial.print("IP Address:");
Serial.println(WiFi.localIP());
Udp.begin(localUdpPort); //启用UDP监听以接收数据
}
void loop()
{
int packetSize = Udp.parsePacket(); //获取当前队首数据包长度
if (packetSize) //如果有数据可用
{
char buf[packetSize];
Udp.read(buf, packetSize); //读取当前包数据
Serial.print("message: ");
Serial.println(buf);
Serial.print("From IP: ");
Serial.println(Udp.remoteIP());
Serial.print("From Port: ");
Serial.println(Udp.remotePort());
}
}
以上代码的例子是esp32作为UDP接收数据的。
我们打开网络调试助手和串口助手。
首先在串口助手上看下esp32的IP地址。
然后打开网络调试助手,如下,框出的区域为目标主机,也就是esp32的IP和端口:
端口号我们在程序里设置的是8080.
然后随便发送数据,测试一下。看一下esp这边的串口接收。
以上,esp32可以收到数据,但是后面又多了乱码,通信是不可靠的。