使用Arduino开发ESP32(十):TCP Client

TCP Client
顾名思义,创建在TCP通讯协议基础上的客户端
TCP Server
创建在TCP通讯协议基础上的服务端web

相关方法:缓存

int connect(IPAddress ip, uint16_t port)
int connect(IPAddress ip, uint16_t port, int32_t timeout)
int connect(const char *host, uint16_t port)
int connect(const char *host, uint16_t port, int32_t timeout)

和服务器创建链接,链接指定IP或域名,链接成功返回1,失败返回0;服务器

size_t write(uint8_t data)
size_t write(const uint8_t *buf, size_t size)
size_t write_P(PGM_P buf, size_t size)
size_t write(Stream &stream)

发送数据,发送成功返回发送字节数,失败返回0; 除了用write()方法外也能够用print()等方法发送数据;svg

int available()

返回可读取数据长度,若是没有数据可读取则返回0;函数

int read()
int read(uint8_t *buf, size_t size)

从接收缓存读取数据并返回读取到的数据字节数,若是返回-1则表示读取失败,读取过的数据会从接收缓存删除;oop

int peek()

读取首字节数据,但并不从接收缓存中删除它;测试

void flush()

清空当前接收缓存;ui

void stop()

关闭客户端,释放资源;spa

uint8_t connected()

返回当前客户端是否与服务器创建链接;指针

IPAddress remoteIP() const
IPAddress remoteIP(int fd) const

返回服务器IP地址;

uint16_t remotePort() const
uint16_t remotePort(int fd) const

返回服务器端口号;

IPAddress localIP() const
IPAddress localIP(int fd) const

返回本地IP地址;

uint16_t localPort() const
uint16_t localPort(int fd) const

返回本地端口号;

代码:

#include <WiFi.h>

const char *ssid = "Wifi名称";
const char *password = "wifi密码";

const IPAddress serverIP(192,168,1,5); //目标地址
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()
{
}

结果:
在这里插入图片描述

总结:

在这里插入图片描述 1.若是链接不上packet sender,把右下角模式切换为自定义ip便可 2.测试时,要把 保持TCO长链接选项 勾选上,否则程序会自动跳出while()循环 3.无法发送中文消息,只能发送ASCII(待改进)