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 )
{
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;
}
在电脑上打开网络调试助手,可以看到已经接收到数据了。
注意:要将电脑的防火墙关闭
三、TCP通信
app_main.c如下所示:
#include "esp_common.h"
#include "lwip/sockets.h"
int app_main(void)
{
int ret;
int tcp_client = socket(AF_INET, SOCK_STREAM, 0);
if (-1 == tcp_client)
{
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");
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);
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);
recvbuf[ret] = '\0';
printf("Recvdate:%s \n",recvbuf);
}
close(tcp_client);
return 0;
}
在电脑上打开网络调试助手,可以看到已经接收到数据了。
注意:要将电脑的防火墙关闭
使用网络调试助手向ESP8266发送一个数据,可以看到,接收成功
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)