ESP32 TCP UPD汇总

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目标端口发送数据
  }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值