文章目录
- 一、前言
- 二、快速运行
- 三、运行效果
- 四、程序流程
- 五、关键函数
- 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的
SSID
和password
- 修改Socket的
IP Address
和Port
- 通过网络调试助手发送
hello
四、程序流程
nvs_flash_init
,初始化默认 NVS 分区esp_netif_init
,初始化底层TCP/IP堆栈esp_event_loop_create_default
,创建默认事件循环example_connect
,连接到指定WiFisocket
,同lwip_socket
,创建一个socketconnect
,同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的文件描述符how
,SHUT_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
觉得好,就一键三连呗(点赞+收藏+关注)