ESP32-C3入门教程 网络篇⑤——TCP Socket Client 客户端应用示例

Posted 小康师兄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP32-C3入门教程 网络篇⑤——TCP Socket Client 客户端应用示例相关的知识,希望对你有一定的参考价值。

一、前言

本文基于VS Code IDE进行编程、编译、下载、运行等操作
基础知识点请查阅:ESP32-C3入门教程 基础篇①——基于VS Code构建Hello World

二、Socket模式

Socket有两种模式

  • Server客户端,连接到别人的Socket Server,然后进行通信
  • Client服务器,开个Socket Server,供其他Client连接,然后进行通信。

本博文描述ESP32-C3作为TCP Socket Client 客户端,与Socket Server进行通信的示例。

三、快速运行

  • 示例项目中,选择protocols—>sockets->tcp_server
  • menuconfig配置ESP32C3-Specific—>Rec 0
  • 芯片选择ESP32-C3(Built-in USB JTAG)
  • 快速运行ESP-IDF Build, Flash and Monitor(左下角)

四、运行效果

  • 用网络调试助手创建TCP Server
  • 修改WiFi AP的SSIDpassword
  • 修改Socket的IP AddressPort
  • 通过网络调试助手发送hello


五、程序流程

  • nvs_flash_init,初始化默认 NVS 分区
  • esp_netif_init,初始化底层TCP/IP堆栈
  • esp_event_loop_create_default,创建默认事件循环
  • example_connect,连接到指定WiFi
  • socket,同lwip_socket,创建一个socket
  • connect,同lwip_connect,连接到指定socket和指定ip端口
  • send,同lwip_send,发送数据Message from ESP32 @小康师兄
  • recv,同lwip_recv,堵塞接收数据
  • shutdown,同lwip_shutdown,关闭Socket的发送和接收
  • close,同lwip_close,释放Socket资源

六、关键函数

6.1 Socket创建

  • domain:创建Socket的领域,AF_UNIX/AF_INET
  • type:创建Socket的类型,SOCK_STREAM/SOCK_DGRAM/SOCK_SEQPACKET
    • [SOCK_STREAM=TCP]提供有序的、可靠的、双向的、连接模式的字节流,并且可以为带外数据提供传输机制。
    • [SOCK_DGRAM=UDP]提供数据报,它们是无连接模式、固定最大长度的不可靠消息。
    • [SOCK_SEQPACKET=RAW]为记录提供有序的、可靠的、双向的、连接模式的传输路径。
  • protocol:创建Socket的协议
int     socket(int domain, int type, int protocol);

6.2 Socket连接

  • socket,socket的文件描述符
  • address,连接的地址
  • address_len,连接的地址长度
int connect(int socket, const struct sockaddr *address, socklen_t address_len);

6.3 发送数据

  • socket,socket的文件描述符
  • buffer,指向包含要发送的消息的缓冲区。
  • length,以字节为单位指定消息的长度。
  • flags,指定消息传输的类型
ssize_t send(int socket, const void *buffer, size_t length, int flags);

6.4 接收数据

  • socket,socket的文件描述符
  • buffer,指向应存储消息的缓冲区。
  • length,指定缓冲区参数指向的缓冲区的长度(以字节为单位) 。
  • flags,指定消息接收的类型。
ssize_t recv(int socket, void *buffer, size_t length, int flags);

6.5 Socket关闭

  • socket,socket的文件描述符
  • howSHUT_RD/SHUT_WR/SHUT_RDWR
    • SHUT_RD,禁用进一步的接收操作。
    • SHUT_WR,禁用进一步的发送操作。
    • SHUT_RDWR,禁用进一步的发送和接收操作。
int shutdown(int socket, int how);

6.6 Socket释放

  • socket,socket的文件描述符
int close(int socket)

七、参考

lwIP - ESP32-C3 - —ESP-IDF 编程指南 latest 文档

觉得好,就一键三连呗(点赞+收藏+关注)

以上是关于ESP32-C3入门教程 网络篇⑤——TCP Socket Client 客户端应用示例的主要内容,如果未能解决你的问题,请参考以下文章

ESP32-C3入门教程 网络篇①——WiFi Scan 快速扫描附近AP无线热点

ESP32-C3入门教程——导读

合宙ESP32C3 更换Flash调整固件教程分享

ESP32C3基于Arduino框架下的 ESP32 RainMaker开发示例教程

ESP 保姆级教程玩转emqx认证篇⑤ ——使用 HTTP 的密码认证

ESP 保姆级教程玩转巴法云篇⑤ —— HTTP Api,提供一些有用功能