完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ESP32模块使用WIFI连接路由器,在使用SOCKET进行UDP通信时,发现在某些路由器下发不出数据,在同一个地方,连接华为的路由器可以正常通信,连接带光猫的天翼路由器则发出的数据收不到,也不能接收客户端发过来的数据,造成产品的兼容性不好,不知道有没遇到类似的情况?测试代码如下:
recSocket = CreateUDPClient(NET_CFG_LISTEN_PORT); ESP_LOGI(TAG,"Create Config listen socket!,socket:%d",recSocket); if(recSocket<=0){ ESP_LOGE(TAG,"Create listen socket fail"); return; } rec_buffer = audio_malloc(NET_CFG_RECBUFF_SIZE*sizeof(char)); if(rec_buffer == NULL){ ESP_LOGE(TAG,"Memory exhaust!"); return; } struct sockaddr_in peerAddr; socklen_t peerLen = sizeof(peerAddr); while(1){ NetworkConfigSend(dest_ip_address,"Hello",5); memset(rec_buffer,0,NET_CFG_RECBUFF_SIZE); if(recSocket>0){ ESP_LOGE(TAG,"Read socket data!"); //bytes_read = read (recSocket, rec_buffer, NET_CFG_RECBUFF_SIZE); bytes_read = recvfrom(recSocket,rec_buffer,NET_CFG_RECBUFF_SIZE,0,(struct sockaddr *)&peerAddr,&peerLen); if(bytes_read>0){ ESP_LOGI(TAG,"Receive packet:%s,bytes:%d",rec_buffer,bytes_read); ESP_LOGI(TAG,"peer address = %s:%dn", inet_ntoa(peerAddr.sin_addr), ntohs(peerAddr.sin_port)); if(NetCommandProcess(rec_buffer)>0){ ESP_LOGI(TAG,"Command process OK"); } dest_ip_address = peerAddr.sin_addr.s_addr; } if(bytes_read < 0){ ESP_LOGE(TAG,"UDP Receive had error!Reset socket.."); recSocket = 0; } else{ ESP_LOGE(TAG,"Rec timeout"); } }else{ vTaskDelay(2000); recSocket = CreateUDPClient(NET_CFG_LISTEN_PORT); ESP_LOGI(TAG,"Create Config listen socket!,socket:%d",recSocket); if(recSocket<=0){ ESP_LOGE(TAG,"UDP Create faile!"); break; } } } |
|
相关推荐
1个回答
|
|
ESP32连接WIFI路由器时UDP通信异常的原因可能有以下几点:
1. **路由器设置问题**:某些路由器可能对UDP数据包进行了限制或过滤,导致数据无法正常传输。 2. **网络地址转换(NAT)问题**:路由器可能对NAT进行了特殊设置,导致UDP数据包无法正确路由。 3. **防火墙设置**:路由器的防火墙可能阻止了UDP数据包的传输。 4. **网络环境问题**:网络环境不稳定或信号干扰可能导致UDP通信异常。 5. **ESP32代码问题**:代码中可能存在错误或配置不当,导致UDP通信异常。 为了解决这个问题,你可以尝试以下方法: 1. **检查路由器设置**:登录路由器管理界面,检查是否有针对UDP数据包的限制或过滤设置,如有,请关闭或调整。 2. **更改路由器NAT设置**:尝试更改路由器的NAT设置,例如启用或禁用NAT,或更改NAT模式。 3. **关闭路由器防火墙**:尝试关闭路由器的防火墙功能,以排除防火墙对UDP数据包的影响。 4. **优化网络环境**:确保网络环境稳定,避免信号干扰。 5. **检查ESP32代码**:仔细检查你的代码,确保UDP通信的相关设置和参数正确无误。以下是一些建议: a. 确保ESP32的IP地址、端口号和其他网络参数设置正确。 b. 检查CreateUDPClient函数的实现,确保它能够正确创建UDP客户端并连接到指定的路由器。 c. 检查ESP_LOGI(TAG, "Create Config listen socket!,socket:%d", recSocket); 这行代码是否正确地输出了socket的值,以便进一步调试。 6. **测试其他路由器**:在不同品牌和型号的路由器上进行测试,以确定问题是否与特定路由器有关。 7. **更新ESP32固件和库**:确保你的ESP32模块使用的是最新版本的固件和库,以解决可能存在的兼容性问题。 通过以上方法,你应该能够找到导致UDP通信异常的原因,并采取相应的解决措施。如果问题仍然存在,建议寻求专业人士的帮助或联系ESP32的技术支持。 |
|
|
|
只有小组成员才能发言,加入小组>>
541浏览 6评论
454浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
434浏览 5评论
436浏览 4评论
409浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 03:24 , Processed in 1.009445 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号