完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请教一下,我利用了ESP32C3 建立了Soft AP ,我想利用ESP32C3做UDP的服务器。热点的建立,参考例程都没有问题。关键是如何形成UDP的服务器。教程有教如何制作成TCP的服务器。。但是 listen_sock = socket(addr_family, SOCK_DGRAM, ip_protocol),中间的变量换成 SOCK_DGRAM,这个是配置UDP的。到了linse的时候, listen(listen_sock, 1);这条语句无法通过,我打印了一下,Error occurred during listen: errno 95。打印信息是这个(如果配置TCP服务器,这条语句是没有问题的。),请问。我如何才能配置成UDP的服务器。谢谢。例外,我使用的IDF是V4.4.4.
|
|
相关推荐
1个回答
|
|
要使用ESP32C3作为UDP服务器,您需要遵循以下步骤。首先,确保您已经成功建立了Soft AP。接下来,我们将使用ESP-IDF开发框架来创建一个UDP服务器。
1. 配置ESP-IDF环境: 确保您已经安装了ESP-IDF开发框架。如果没有,请访问 https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/get-started/index.html 并按照指南安装。 2. 创建一个新的ESP-IDF项目: 在您喜欢的IDE中创建一个新的ESP-IDF项目,例如Visual Studio Code。 3. 编写UDP服务器代码: 在您的项目中,创建一个新的C文件,例如`udp_server.c`,并添加以下代码: ```c #include #include #include #include #include #include #define UDP_SERVER_PORT 1234 static const char *TAG = "UDP_SERVER"; void udp_server_task(void *pvParameters) { int listen_sock = -1; struct sockaddr_in server_addr; struct sockaddr_in client_addr; socklen_t client_addr_len = sizeof(client_addr); char buffer[1024]; listen_sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (listen_sock < 0) { ESP_LOGE(TAG, "Error occurred during socket creation: errno %d", errno); return; } memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(UDP_SERVER_PORT); if (bind(listen_sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { ESP_LOGE(TAG, "Error occurred during bind: errno %d", errno); close(listen_sock); return; } while (1) { memset(buffer, 0, sizeof(buffer)); int bytes_received = recvfrom(listen_sock, buffer, sizeof(buffer), 0, (struct sockaddr *)&client_addr, &client_addr_len); if (bytes_received < 0) { ESP_LOGE(TAG, "Error occurred during recvfrom: errno %d", errno); continue; } ESP_LOGI(TAG, "Received %d bytes from %s:%d", bytes_received, inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); ESP_LOGI(TAG, "Data: %s", buffer); // Process the received data and send a response if needed // ... } close(listen_sock); } void app_main() { ESP_LOGI(TAG, "Starting UDP server..."); xTaskCreate(&udp_server_task, "udp_server_task", 4096, NULL, 5, NULL); } ``` 4. 配置项目: 在`sdkconfig`文件中,确保启用了以下选项: ``` CONFIG_LWIP_IPV4=y CONFIG_LWIP_UDP=y ``` 5. 编译并烧录到ESP32C3: 使用ESP-IDF构建系统编译您的项目,并将生成的二进制文件烧录到ESP32C3开发板上。 6. 测试UDP服务器: 使用网络工具(如Wireshark或在线UDP测试工具)向ESP32C3的IP地址发送UDP数据包。您应该能够在ESP32C3的串行控制台中看到接收到的数据。 注意:在您的代码中,`listen()`函数是不必要的,因为UDP是无连接的协议。您应该直接使用`recvfrom()`和`sendto()`函数来接收和发送数据。 通过以上步骤,您应该能够成功创建一个基于ESP32C3的UDP服务器。如果遇到任何问题,请检查您的网络配置和ESP32C3的串行输出,以便找到可能的错误。 |
|
|
|
只有小组成员才能发言,加入小组>>
416浏览 6评论
346浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
329浏览 5评论
331浏览 4评论
313浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-20 09:50 , Processed in 0.785119 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号