ESP8266 RTOS2.0学习之旅(4)— UDP通信和TCP客户端通信

UDP通信和TCP客户端通信

一、前言

在之前的基础上开始:ESP8266 RTOS学习之旅(3)— 连接到WiFi
user文件夹下新建一个文件app_main.c,然后再wifi连接成功后创建一个任务,任务函数为app_main(),这样我们就可以在app_main.c中的app_main()函数实现UDP和TCP通信。

xTaskCreate(app_main, "app main", 256, NULL, 8, NULL);

二、UDP通信

app_main.c如下所示:

#include "esp_common.h"
#include "lwip/sockets.h"

int app_main(void )
{
	/* 1. 创建一个socket,协议簇为AF_INET 协议栈,类型是SOCK_DGRAM,UDP类型 */
    int sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sock_fd  == -1)
    {
        printf("Socket error\n");
        return 0;
    }
    
	/* 2. 准备接收方的地址和端口,'192.168.0.107'表示目的ip地址,8080表示目的端口号  */
    struct sockaddr_in server_addr = {0};	
    server_addr.sin_family = AF_INET;                         // 设置地址族为IPv4
    server_addr.sin_port = htons(8266);						// 设置地址的端口号信息
    server_addr.sin_addr.s_addr = inet_addr("192.168.0.107");	// 设置IP地址

    /* 3. 发送数据到指定的ip和端口 */
	char sendbuf[]={"hello world."};
	sendto(sock_fd, sendbuf, sizeof(sendbuf), 0, (struct sockaddr*)&server_addr, sizeof(server_addr));
	
    // 4. 关闭套接字
    close(sock_fd);

    return 0;
}

在电脑上打开网络调试助手,可以看到已经接收到数据了。
注意:要将电脑的防火墙关闭
在这里插入图片描述

三、TCP通信

app_main.c如下所示:

#include "esp_common.h"
#include "lwip/sockets.h"

int app_main(void)
{
    int ret;
    // 1、使用socket()函数获取一个TCP客户端socket文件描述符
	int tcp_client = socket(AF_INET, SOCK_STREAM, 0);
    if (-1 == tcp_client)
	{
		perror("socket");
		return -1;
	}

    // 2、准备服务端的地址和端口,'192.168.0.107'表示目的ip地址,12341表示目的端口号
    struct sockaddr_in server_addr = {0};
	server_addr.sin_family = AF_INET;                           // 设置地址族为IPv4
	server_addr.sin_port = htons(8266);						// 设置地址的端口号信息
	server_addr.sin_addr.s_addr = inet_addr("192.168.0.103");	// 设置IP地址

    // 3、链接到服务器
    ret = connect(tcp_client, (const struct sockaddr *)&server_addr, sizeof(server_addr));
    if (ret < 0)
		perror("connect");
    else
	    printf("connect result, ret = %d.\n", ret);

    // 4. 发送数据到服务端
	char sendbuf[]={"hello world."};
	ret = send(tcp_client, sendbuf, strlen(sendbuf),0);

    // 5、等待接收服务端发送过来的数据,最大接收1024个字节
    char *recvbuf = os_malloc(1024);
    while(1)
    {
		ret = recv(tcp_client, recvbuf, 1024, 0);
		recvbuf[ret] = '\0';

		// 6、将接收到的数据打印出来
		printf("Recvdate:%s \n",recvbuf);
    }

    // 7、关闭套接字
    close(tcp_client);

    return 0;
}

在电脑上打开网络调试助手,可以看到已经接收到数据了。
注意:要将电脑的防火墙关闭
在这里插入图片描述
使用网络调试助手向ESP8266发送一个数据,可以看到,接收成功
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值