博客
关于我
ESP8266 RTOS2.0学习之旅(4)— UDP通信和TCP客户端通信
阅读量:552 次
发布时间:2019-03-09

本文共 2450 字,大约阅读时间需要 8 分钟。

#_UDP通信和TCP客户端通信实践指南

项目背景

在之前的项目基础上,我们开始在user文件夹下创建app_main.c文件。任务函数设定为app_main(),以便在app_main.c中实现UDPTCP通信。

《《《_udp通信》》》

UDP通信实现步骤

  • 创建UDPsocket:使用socket(AF_INET, SOCK_DGRAM, 0)创建一个UDP通信套接字。
  • 设置接收方地址信息
    通过
    struct sockaddr_in server_addr指定接收方的IP地址和端口号。设置时使用
    htons()将端口号转换为网络字典序。
  • 发送数据:使用sendto()函数将消息发送到指定IP地址和端口号。
  • 提前关闭套接字:完成所有发送操作后,使用close()关闭套接字,释放内核资源。

    <### 代码示例:

    int app_main(void) {    int sock_fd = socket(AF_INET, SOCK_DGRAM, 0);    if (sock_fd == -1) {        printf("Socket error\n");        return 0;    }    struct sockaddr_in server_addr = {0};    server_addr.sin_family = AF_INET;    server_addr.sin_port = htons(8266);    server_addr.sin_addr.s_addr = inet_addr("192.168.0.107");    char sendbuf[] = "hello world.";    sendto(sock_fd, sendbuf, sizeof(sendbuf), 0, (struct sockaddr*)&server_addr, sizeof(server_addr));    close(sock_fd);    return 0;}

    项目验证

    PC上启用网络调试助手,并确保防火墙已关闭。运行代码,开启网络助手,即可看到从ESP8266接收到的"hello world."消息。

    《《《_tcp客户端通信》》》

    TCP通信实现步骤

  • 创建TCP客户端socket:使用socket(AF_INET, SOCK_STREAM, 0)创建一个TCP通信套接字。
  • 设置服务器地址信息:通过struct sockaddr_in server_addr指定服务器的IP地址和端口号。
  • 连接到服务器:调用connect()函数,尝试建立与服务器的TCP连接。若连接成功,返回0,否则通过perror显示错误信息。
  • 发送数据:使用send()函数向服务器发送数据。此外,使用sendbuf传递字节流数据。
  • 接收数据:使用recv()函数持续接收服务器发送的数据。若接收失败,检查返回值判断是否有错误发生。
  • 关闭套接字:完成通信后,用close()关闭套接字以释放资源。
  • 代码示例:

    int app_main(void) {    // 创建TCP客户端socket    int tcp_client = socket(AF_INET, SOCK_STREAM, 0);    if (tcp_client == -1) {        perror("socket");        return -1;    }    // 定义服务器地址和端口号    struct sockaddr_in server_addr = {0};    server_addr.sin_family = AF_INET;    server_addr.sin_port = htons(8266);    server_addr.sin_addr.s_addr = inet_addr("192.168.0.103");    // 建立连接    int ret = connect(tcp_client, (struct sockaddr *)&server_addr, sizeof(server_addr));    if (ret == -1) {        perror("connect");        return -1;    } else {        printf("连接成功,返回值 = %d.\n", ret);    }    // 发送数据    char sendbuf[] = "hello world.";    ret = send(tcp_client, sendbuf, strlen(sendbuf), 0);    // 接收数据    char *recvbuf = os_malloc(1024);    while (1) {        ret = recv(tcp_client, recvbuf, 1024, 0);        if (ret == -1) {            printf("接收失败:%s\n", strerror(errno));            break;        }        recvbuf[ret] = '\0';        printf("接收到的数据:%s\n", recvbuf);    }    // 关闭套接字    close(tcp_client);    return 0;}

    项目验证

    PC上启用网络调试助手,并确保防火墙已关闭。运行代码,进入网络助手Observation,连接 ESP8266,观察双向数据流动。传输过程中,接收到的消息应显示"hello world."

    通过以上步骤,开发者可以在ESP8266上实现UDPTCP通信,实现微控制器与PC之间的数据交互。

    转载地址:http://nxqsz.baihongyu.com/

    你可能感兴趣的文章
    npm报错Cannot find module ‘webpack‘ Require stack
    查看>>
    npm报错Failed at the node-sass@4.14.1 postinstall script
    查看>>
    npm报错fatal: Could not read from remote repository
    查看>>
    npm报错File to import not found or unreadable: @/assets/styles/global.scss.
    查看>>
    npm报错TypeError: this.getOptions is not a function
    查看>>
    npm报错unable to access ‘https://github.com/sohee-lee7/Squire.git/‘
    查看>>
    npm淘宝镜像过期npm ERR! request to https://registry.npm.taobao.org/vuex failed, reason: certificate has ex
    查看>>
    npm版本过高问题
    查看>>
    npm的“--force“和“--legacy-peer-deps“参数
    查看>>
    npm的安装和更新---npm工作笔记002
    查看>>
    npm的常用操作---npm工作笔记003
    查看>>
    npm的常用配置项---npm工作笔记004
    查看>>
    npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
    查看>>
    npm编译报错You may need an additional loader to handle the result of these loaders
    查看>>
    npm设置淘宝镜像、升级等
    查看>>
    npm设置源地址,npm官方地址
    查看>>
    npm设置镜像如淘宝:http://npm.taobao.org/
    查看>>
    npm配置安装最新淘宝镜像,旧镜像会errror
    查看>>
    NPM酷库052:sax,按流解析XML
    查看>>
    npm错误 gyp错误 vs版本不对 msvs_version不兼容
    查看>>