ESP32 之 ESP-IDF 教学(十二)WiFi篇—— LwIP 之 TCP 通信

本文章 来自原创专栏《ESP32教学专栏 (基于ESP-IDF)》,讲解如何使用 ESP-IDF 构建 ESP32 程序,发布文章并会持续为已发布文章添加新内容! 每篇文章都经过了精打细磨!

↓↓↓通过下方对话框进入专栏目录页↓↓↓
CSDN 请求进入目录       _ O x

是否进入ESP32教学导航(基于ESP-IDF)?

       确定


文章目录

    • 一、建立连接 —— ESP32 作 TCP Client客户端
      • 1. TCP Client 的基本思路
      • 2. TCP Client 代码示例
    • 二、建立连接 —— ESP32 做 TCP Server服务器
      • 1. 代码示例
    • 三、收发数据
    • 四、LwIP BSD API 与TCP/UDP 有关的函数

一、建立连接 —— ESP32 作 TCP Client客户端

1. TCP Client 的基本思路

ESP32 之 ESP-IDF 教学(十二)WiFi篇—— LwIP 之 TCP 通信_第1张图片

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")<

你可能感兴趣的:(ESP32,教学专栏,(基于ESP-IDF),udp,tcp/ip,单片机,物联网,c语言)