博客
关于我
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/

    你可能感兴趣的文章
    Open vSwitch实验常用命令
    查看>>
    Open WebUI 忘了登入密码怎么办?
    查看>>
    open-vm-tools-dkms : 依赖: open-vm-tools (>= 2:9.4.0-1280544-5ubuntu3) 但是它将不会被安装
    查看>>
    open3d-Dll缺失,未找到指定模块解决
    查看>>
    Openbox-桌面图标设置
    查看>>
    opencart出现no such file or dictionary
    查看>>
    opencv Mat push_back
    查看>>
    opencv videocapture读取视频cap.isOpened 输出总是false
    查看>>
    opencv waitKey() 函数理解及应用
    查看>>
    OpenCV 中的图像转换
    查看>>
    OpenCV 在 Linux 上的 python 与 anaconda 无法正常工作.收到未实现 cv2.imshow() 的错误
    查看>>
    Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)上
    查看>>
    opencv 模板匹配, 已解决模板过大程序不工作的bug
    查看>>
    OpenCV 错误:(-215)size.width>0 &&函数imshow中的size.height>0
    查看>>
    opencv&Python——多种边缘检测
    查看>>
    opencv&python——高通滤波器和低通滤波器
    查看>>
    OpenCV-Python接口、cv和cv2的性能比较
    查看>>
    opencv1-加载、修改、保存图像
    查看>>
    opencv10-形态学操作
    查看>>
    opencv11-提取水平直线和垂直直线
    查看>>