本文共 2450 字,大约阅读时间需要 8 分钟。
#_UDP通信和TCP客户端通信实践指南
在之前的项目基础上,我们开始在user文件夹下创建app_main.c文件。任务函数设定为app_main(),以便在app_main.c中实现UDP和TCP通信。
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."消息。
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上实现UDP和TCP通信,实现微控制器与PC之间的数据交互。
转载地址:http://nxqsz.baihongyu.com/