当前位置:首页 » 《随便一记》 » 正文

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

29 人参与  2022年02月27日 08:19  分类 : 《随便一记》  评论

点击全文阅读


文章目录

  • 一、前言
  • 二、快速运行
  • 三、运行效果
  • 四、程序流程
  • 五、关键函数
    • 5.1 Socket创建
    • 5.2 Socket连接
    • 5.3 发送数据
    • 5.4 接收数据
    • 5.5 Socket关闭
    • 5.6 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资源

五、关键函数

5.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);

5.2 Socket连接

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

5.3 发送数据

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

5.4 接收数据

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

5.5 Socket关闭

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

5.6 Socket释放

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

六、参考

https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32c3/api-guides/lwip.html?highlight=shutdown#bsd-sockets-api

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


点击全文阅读


本文链接:http://zhangshiyu.com/post/35440.html

发送  连接  接收  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1