从零开始的ESP8266探索(17)-Client(客户端)功能使用
文章目录
目的
前面的文章中有介绍使用Server(服务器)功能,这里的Server和Client指的是基本的TCP的Server和Client,当然就像前面的文章演示的那样你也可以把它用成WEB Server和WEB Client,因为这两个就是建立在TCP之上的。这篇文章主要介绍及演示下之前没有用到的Client功能。
使用说明
Client的使用步骤如下:
- 引用
#include <ESP8266WiFi.h>
库; 连上网(好像是一句废话);- 在想要连接服务器前声明一个
WiFiClient
对象,根据需求你也可以声明为全局对象; - 使用
connect(ip, port)
或connect(URL, port)
方法连接到服务器; - 进行读写通讯;
具体的使用可以参考下面的演示:
作为TCP Client使用
使用下面代码进行测试:
#include <ESP8266WiFi.h>
const char *ssid = "********";
const char *password = "********";
const IPAddress serverIP(192,168, 21,100); //欲访问的地址
uint16_t serverPort = 38224; //服务器端口号
WiFiClient client; //声明一个客户端对象,用于与服务器进行连接
void setup()
{
Serial.begin(115200);
Serial.println();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("Connected");
Serial.print("IP Address:");
Serial.println(WiFi.localIP());
}
void loop()
{
Serial.println("尝试访问服务器");
if (client.connect(serverIP, serverPort)) //尝试访问目标地址
{
Serial.println("访问成功");
client.print("Hello world!"); //向服务器发送数据
while (client.connected() || client.available()) //如果已连接或有收到的未读取的数据
{
if (client.available()) //如果有数据可读取
{
String line = client.readStringUntil('\n'); //读取数据到换行符
Serial.print("读取到数据:");
Serial.println(line);
client.print(String("Receive:") + line);
}
}
Serial.println("关闭当前连接");
client.stop(); //关闭客户端
}
else
{
Serial.println("访问失败");
client.stop(); //关闭客户端
}
delay(5000);
}
上图中我们用工具建立的TCP Server进行测试;
作为WEB Client使用
使用下面代码进行测试:
#include <ESP8266WiFi.h>
const char *ssid = "********";
const char *password = "********";
const char *host = "www.example.com"; //欲访问的域名
void setup()
{
Serial.begin(115200);
Serial.println();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("Connected");
Serial.print("IP Address:");
Serial.println(WiFi.localIP());
}
void loop()
{
WiFiClient client; //声明一个客户端对象,用于与服务器进行连接
Serial.println("尝试访问服务器");
if (client.connect(host, 80))
{
Serial.println("访问成功");
//向服务器发送请求头,请求网页数据
//******作为WEB Client使用最核心的就是和WEB Server连接成功后发送相应的请求头请求数据******
//******关于请求头可以参考之前的文章《从零开始的ESP8266探索(06)-使用Server功能搭建Web Server》******
client.print(String("GET /") + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n" +
"\r\n");
//以下代码将收到的网页数据按行打印输出
//如果是常见的WEB Client(浏览器)的话会将收到的html文件渲染成我们一般看到的网页
while (client.connected() || client.available()) //如果已连接或有收到的未读取的数据
{
if (client.available()) //如果有数据可读取
{
String line = client.readStringUntil('\n'); //按行读取数据
Serial.println(line);
}
}
client.stop(); //关闭当前连接
}
else
{
Serial.println("访问失败");
client.stop(); //关闭当前连接
}
delay(10000);
}
上图测试中我们首先去访问www.example.com(该网址是专门用于测试的)
,在连接成功后我们向服务器发送请求头
请求网页数据,服务器在收到请求头向我们返回了响应头
和网页数据
(数据可以参考下图,你也可以在浏览器中打开此页面然后右击查看源代码
);
总结
上面两个就是Client常用的功能了,一般可以通过外网访问的物联网设备大多就是作为Client。
更多内容可以参考如下:
https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/client-examples.html
https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/client-class.html