本文章 来自原创专栏《ESP32教学专栏 (基于ESP-IDF)》,讲解如何使用 ESP-IDF 构建 ESP32 程序,发布文章并会持续为已发布文章添加新内容! 每篇文章都经过了精打细磨!
↓↓↓通过下方对话框进入专栏目录页↓↓↓
CSDN 请求进入目录 _ O x
是否进入ESP32教学导航(基于ESP-IDF)?
确定
文章目录
一、建立连接 —— ESP32 作 TCP Client客户端
1. TCP Client 的基本思路
2. TCP Client 代码示例
以下代码是一个函数tcp_task_client
实现的是一个FreeRTOS的Task,在这个任务里完成了以下内容:
- 等待WiFi连接成功(基于FreeRTOS API 之 事件组
Event Group
) - 创建Socket对象并初始为TCP(注意代码第7行),并检测Socket是否创建成功。
- 配置连接参数结构(结构体
struct sockaddr_in
类型的desk_addr
) - 循环连接服务端,直至连接成功
具体请见注释
void tcp_task_client(void *arg){
xEventGroupWaitBits(wifiEvent, wifiConnectedBit, pdFALSE, pdFALSE, portMAX_DELAY);
int _socket;
createSocket: // 标签
_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
// AF_INET表示IPv4,AF_INET6表示IPv6
// SOCK_STREAM表示TCP;
// SOCK_DGRAM表示UDP;
// SOCK_RAW表示RAW
// protocol, 规定套接字发送和接送哪类型协议数据。
// 最常见的是 IPPROTO_TCP, IPPROTO_UDP, IPPROTO_UDPLITE、IPPROTO_ICMP。
// 如果 domain 和 type已经确定唯一的协议,“0(IPPROTO_IP)” 可以用来表示选择一个默认的协议。
if(_socket < 0){
printf("Socket 创建失败, 错误代码:%d\n", errno);
vTaskDelete(NULL);
}else{
printf("Socket 创建成功");
}
struct sockaddr_in desk_addr = {
// 下边这个IP 192.168.31.138和端口号8080是自己设置的,请按需要修改
.sin_addr.s_addr = inet_addr("192.168.31.138")<