tcp 与upd区别在于交互对象数量不一样
1.tcp1对1连接
2.udp则支持1对多
所以tcp是可靠传输
udp是不可靠传输
首先介绍tcp,c++代码如下
#include <WiFi.h>
const char *ssid = "abc";
const char *password = "123456";
const IPAddress serverIP(192,168,43,1); //目标地址
uint16_t serverPort = 2525; //目标服务器端口号
WiFiClient client; //声明一个客户端对象,用于与服务器进行连接
void setup()
{
Serial.begin(115200);
Serial.println();
WiFi.mode(WIFI_STA); //站点模式
WiFi.setSleep(false); //关闭STA模式下wifi休眠,提高响应速度
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(2500);
Serial.print(".");
}
Serial.println("已连接");
Serial.print("本机ip地址:");
Serial.println(WiFi.localIP());
Serial.println("尝试访问服务器");
if (client.connect(serverIP, serverPort)) //尝试访问目标地址
{
Serial.println("访问成功");
client.print("Hello world!"); //向服务器发送“hello world”
while (client.connected()) //如果处于连接状态
{
if(client.available())
{
Serial.println("查询信息:");
if (client.available()) //如果有数据可读取
{
String line = client.readStringUntil('\n'); //读取数据到换行符
Serial.print("收到消息:");
Serial.println(line);
client.write(line.c_str()); //将收到的数据回发
//c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同
}
}
}
Serial.println("关闭当前连接");
client.stop(); //关闭客户端
}
else
{
Serial.println("访问失败");
client.stop(); //关闭客户端
}
}
void loop()
{
}
从以上代码可知,要使用tcp,首先要连入网络,其与指定的ip 地址进行通话
流程简化如下:
//首先是连接:
client.connect(serverIP, serverPort)//第一个参数为局域网内ip,第二个为端口号
//下面是对与一些常用函数的介绍
if(client.connected()) //如果处于连接状态 顾名思义查看连接状态
if(client.available()) //如果准备ok
//接收数据方式
String line = client.readStringUntil('\n');读取到对方发送数据 赋予String
//发送数据方式
client.write(line.c_str()); //将收到的数据回发
//关闭连接
client.stop(); //关闭客户端
之后是udp
#include <WiFi.h> //wifi功能需要的库
WiFiUDP Udp;//声明UDP对象
const char* wifi_SSID="ap"; //存储AP的名称信息
const char* wifi_Password="ap"; //存储AP的密码信息
uint16_t udp_port=6060; //存储需要监听的端口号
char incomingPacket[255]; //存储Udp客户端发过来的数据
void setup() {
// put your setup code here, to run once:
Serial.begin(115200); //开启串口,波特率为115200
WiFi.softAP(wifi_SSID,wifi_Password); //打开ESP32热点
Serial.print("\n开发板IP地址为:");
Serial.print(WiFi.softAPIP()); //串口输出模块IP地址
Udp.begin(udp_port);//启动UDP监听这个端口
}
void loop() {
// put your main code here, to run repeatedly:
/*接收发送过来的Udp数据*/
int Data_length=Udp.parsePacket(); //获取接收的数据的长度
if(Data_length) //如果有数据那么Data_length不为0,无数据Data_length为0
{
int len = Udp.read(incomingPacket, 255); //读取数据,将数据保存在数组incomingPacket中
if (len > 0) //为了避免获取的数据后面乱码做的判断
{
incomingPacket[len] = 0;
}
/*将接受到的数据发送回去*/
Udp.beginPacket(Udp.remoteIP(),Udp.remotePort()); //准备发送数据到目标IP和目标端口
Udp.print("receive data:"); //将数据receive data:放入发送的缓冲区
Udp.println(incomingPacket); //将接收到的数据放入发送的缓冲区
Udp.endPacket(); //向目标IP目标端口发送数据
}
}