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

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

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

项目背景

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

《《《_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上实现UDP和TCP通信,实现微控制器与PC之间的数据交互。

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

    你可能感兴趣的文章
    Python--10、线程
    查看>>
    Python--Redis实战:第四章:数据安全与性能保障:第4节:复制
    查看>>
    python--基本代码规范
    查看>>
    Python--抽象类接口类
    查看>>
    PYTHON--欧拉习题二
    查看>>
    python--高级应用总结
    查看>>
    python-520表白代码,我看谁说程序员不懂浪漫,送你几套表白代码,一步到位
    查看>>
    Python-Asyncio TypeError:无法在‘;等待‘;表达式中使用对象DICT
    查看>>
    Python-AttributeError:‘;dict&39;对象没有属性‘;序列‘;
    查看>>
    Python-ldap:是否可以在不显式写入密码的情况下进行绑定?
    查看>>
    python出现 unknown encoding: idna 的处理方法
    查看>>
    Python出现 RuntimeError: dictionary changed size during iteration 的解决方法
    查看>>
    Python-numpy(2)数组的操作
    查看>>
    Python-Numpy的tile函数用法
    查看>>
    python-open函数
    查看>>
    Python-Pandas-将特定函数应用于给定级别-多索引数据框架
    查看>>
    python-queue队列通信
    查看>>
    python-ros No module named PyKDL
    查看>>
    python-social-auth 是否需要会话
    查看>>
    Python再获年度编程语言,微软或成最大赢家
    查看>>