05-ESP8226的TCP客户端学习

本文介绍了ESP8266作为TCP客户端如何连接服务器,理解TCP的三次握手和四次挥手过程,并通过官方和菜鸟哥的例程展示了如何进行数据的读写操作。内容包括TCP的基础知识、客户端与服务器的区别以及ESP8266的TCP库使用。
摘要由CSDN通过智能技术生成

前言

TCP和客户端对于我来说就是完全陌生的知识领域,所以这部分也是百度了解来的

05-ESP8226的TCP客户端库学习

有标题先拆分两个内容TCP和客户端,下图是ESP8266作为客户端的示意图,其中PC作为服务器,ESP8266作为客户端获取服务器的数据

image

什么是TCP?

对于一个不懂的小白确实需要初步了解一下TCP的三个过程。引用博客

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接、可靠的、基于字节流的传输层通信协议。

TCP 协议的执行过程分为三个阶段

  1. 连接创建(Connection Establishment)
  2. 数据传送(Data Transfer)
  3. 连接终止(Connection Termination)

其中「连接创建」与「连接终止」分别是耳熟能详的 TCP 协议三次握手(TCP Three-way Handshake)与四次挥手(TCP Four-way Handshake),也是理解本文 TCP 服务器与客户端通信过程的两个核心阶段。

下图是「连接创建」的三次握手示意图

75c85605d8343adb4a191d05951c5097.png

下图是「连接终止」的四次挥手示意图

555b8cf6f7f07b6e1cc67e9da95a2266.png

什么是客户端和服务器端?

简单点说:客户端(Client)是发送请求(request),服务器端(Service)是响应请求(response),返回相应的资源数据

服务器的特征:被动角色,等待来自客户端的连接请求,处理请求并回传结果。

客户端的特征:主动角色,发送连接请求,等待服务器的响应。

端口:是指用于区分不同服务的逻辑编号,端口号的范围从0到65535,SIEMENS设备的开放式以太网通信通常使用编号为2000~5000范围内端口。

客户端侧在配置TCP连接时,必须设置服务器IP地址及端口号,自身使用的端口号如果没有明确指定,则由设备自动分配。

服务器侧在配置TCP连接时,必须设置服务器使用的端口号,客户端IP地址及端口号为可选项。

下面来看库文件**WiFiClient.h**,同样做了分类:

连接操作:

//客户端连接
  virtual int connect(IPAddress ip, uint16_t port) override;
  virtual int connect(const char *host, uint16_t port) override;
  virtual int connect(const String& host, uint16_t port);

//停止TCP连接
  bool stop(unsigned int maxWaitMs);

//TCP连接状态
virtual uint8_t status();
//连接状态宏定义,与上面TCP部分对应
enum tcp_state {
   
  CLOSED      = 0,
  LISTEN      = 1,
  SYN_SENT    = 2,
  SYN_RCVD    = 3,
  ESTABLISHED = 4,
  FIN_WAIT_1  = 5,
  FIN_WAIT_2  = 6,
  CLOSE_WAIT  = 7,
  CLOSING     = 8,
  LAST_ACK    = 9,
  TIME_WAIT   = 10
};
//客户端是否在连接
virtual uint8_t connected() override;

//写
  virtual size_t write(uint8_t) override;
  virtual size_t write(const uint8_t *buf, size_t size) override;
  virtual size_t write_P(PGM_P buf, size_t size);

//发送数据
	println();
	print();

//读取响应数据中的一个字符,清掉  
  virtual int read() override;
//读取固定大小的响应数据,清掉  
  virtual int read(uint8_t* buf, size_t size) override;
//读取响应数据中的一个字符,不清掉  
virtual int peek() override;
//读取固定大小的响应数据,不清掉   
virtual size_t peekBytes(uint8_t *buffer, size_t length);
//清除缓冲区
bool flush(unsigned int maxWaitMs);

官方例程1:

/*
    This sketch sends a string to a TCP server, and prints a one-line response.
    You must run a TCP server in your local network.
    For example, on Linux you can use this command: nc -v -l 3000
*/

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#ifndef STASSID
#define STASSID "tangbo"
#define STAPSK  "88888888"
#endif

const char* ssid     
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值