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

    你可能感兴趣的文章
    nginx总结及使用Docker创建nginx教程
    查看>>
    nginx报错:the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:128
    查看>>
    nginx报错:the “ssl“ parameter requires ngx_http_ssl_module in usrlocalnginxconfnginx.conf128
    查看>>
    nginx日志分割并定期删除
    查看>>
    Nginx日志分析系统---ElasticStack(ELK)工作笔记001
    查看>>
    Nginx映射本地json文件,配置解决浏览器跨域问题,提供前端get请求模拟数据
    查看>>
    nginx最最最详细教程来了
    查看>>
    Nginx服务器---正向代理
    查看>>
    Nginx服务器上安装SSL证书
    查看>>
    Nginx服务器的安装
    查看>>
    Nginx模块 ngx_http_limit_conn_module 限制连接数
    查看>>
    nginx添加模块与https支持
    查看>>
    Nginx用户认证
    查看>>
    Nginx的location匹配规则的关键问题详解
    查看>>
    Nginx的Rewrite正则表达式,匹配非某单词
    查看>>
    Nginx的使用总结(一)
    查看>>
    Nginx的使用总结(三)
    查看>>
    Nginx的使用总结(二)
    查看>>
    Nginx的可视化神器nginx-gui的下载配置和使用
    查看>>
    Nginx的是什么?干什么用的?
    查看>>