AI智能
改变未来

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

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

相关方法:

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()等方法发送数据;

int available()

返回可读取数据长度,如果没有数据可读取则返回0;

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

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

int peek()

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

void flush()

清空当前接收缓存;

void stop()

关闭客户端,释放资源;

uint8_t connected()

返回当前客户端是否与服务器建立连接;

IPAddress remoteIP() constIPAddress remoteIP(int fd) const

返回服务器IP地址;

uint16_t remotePort() constuint16_t remotePort(int fd) const

返回服务器端口号;

IPAddress localIP() constIPAddress localIP(int fd) const

返回本地IP地址;

uint16_t localPort() constuint16_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(待改进)

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 使用Arduino开发ESP32(十):TCP Client