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

    你可能感兴趣的文章
    Node.js升级工具n
    查看>>
    Node.js卸载超详细步骤(附图文讲解)
    查看>>
    Node.js卸载超详细步骤(附图文讲解)
    查看>>
    Node.js基于Express框架搭建一个简单的注册登录Web功能
    查看>>
    node.js学习之npm 入门 —8.《怎样创建,发布,升级你的npm,node模块》
    查看>>
    Node.js安装与配置指南:轻松启航您的JavaScript服务器之旅
    查看>>
    Node.js安装及环境配置之Windows篇
    查看>>
    Node.js安装和入门 - 2行代码让你能够启动一个Server
    查看>>
    node.js安装方法
    查看>>
    Node.js官网无法正常访问时安装NodeJS的方法
    查看>>
    node.js模块、包
    查看>>
    node.js的express框架用法(一)
    查看>>
    Node.js的交互式解释器(REPL)
    查看>>
    Node.js的循环与异步问题
    查看>>
    Node.js高级编程:用Javascript构建可伸缩应用(1)1.1 介绍和安装-安装Node
    查看>>
    nodejs + socket.io 同时使用http 和 https
    查看>>
    NodeJS @kubernetes/client-node连接到kubernetes集群的方法
    查看>>
    NodeJS API简介
    查看>>
    Nodejs express 获取url参数,post参数的三种方式
    查看>>
    nodejs http小爬虫
    查看>>