完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
你好,目前我在项目中需要使用8266接收网络数据包,使用Lwip 、socket、UDP协议,一次接收20KB的数据存放在Ram中。
代码如下: struct sockaddr_in socket_addr; sock_fd = socket(AF_INET,SOCK_DGRAM,0); socket_addr.sin_len = sizeof(socket_addr); socket_addr.sin_family = AF_INET; socket_addr.sin_port = htons(12321); socket_addr.sin_addr.s_addr = inet_addr("192.168.2.101"); bind(sock_fd, (struct sockaddr *)&socket_addr, sizeof(socket_addr)); while(1) { len_rec = recvfrom(sock_fd, (uint8 *)DataBuff,sizeof(DataBuff),0,NULL,NULL); printf("len_rec = %dn",len_rec); } DataBuff是一个20KB的字节数组,全局变量。 在使用RTOS SDK中进行测试的过程中发现,发送端(PC)单次发送的数据包超过1500字节,8266(接收端)就收不到。 在Lwip协议栈中,一般通过修改lwipopts.h文件中的两个宏IP_REASSEMBLY、IP_FRAG为1即可实现IP层的数据包自动分包和重组,但是实际上我修改之后仍然无效,请问是不是还有其他宏需要修改?或者lwip本身有限制? |
|
相关推荐
1个回答
|
|
et_fd, (struct sockaddr *)&socket_addr, sizeof(socket_addr));
首先,我需要澄清一下,ESP8266 RTOS SDK中的LwIP库默认支持UDP协议的自动分包和重组。但是,您需要确保您的代码正确地处理了这些情况。以下是一些建议和解决方案: 1. 确保您的ESP8266有足够的内存来接收20KB的数据。ESP8266的内存有限,因此请确保您的项目没有其他内存密集型任务。 2. 使用LwIP的`recvfrom()`函数来接收UDP数据包。这个函数会处理数据包的接收和重组。示例代码如下: ```c uint8_t buffer[20 * 1024]; // 20KB的缓冲区 struct sockaddr_in from_addr; socklen_t from_len = sizeof(from_addr); int bytes_received = recvfrom(sock_fd, buffer, sizeof(buffer), 0, (struct sockaddr *)&from_addr, &from_len); ``` 3. 检查`recvfrom()`函数返回的字节数。如果返回的字节数小于20KB,这意味着数据包可能被分包。在这种情况下,您需要继续接收数据包,直到接收到足够的数据。 4. 如果您需要处理多个数据包,可以使用一个循环来接收数据包,直到接收到足够的数据。示例代码如下: ```c int total_bytes_received = 0; while (total_bytes_received < 20 * 1024) { int bytes_received = recvfrom(sock_fd, buffer + total_bytes_received, sizeof(buffer) - total_bytes_received, 0, (struct sockaddr *)&from_addr, &from_len); if (bytes_received > 0) { total_bytes_received += bytes_received; } else { // 处理错误或完成接收 break; } } ``` 5. 确保您的网络环境稳定,以减少数据包丢失的可能性。如果数据包丢失,LwIP会自动重传数据包,但这也可能导致接收到的数据不完整。 6. 如果您仍然遇到问题,可以尝试使用其他工具(如Wireshark)来捕获网络数据包,以便更好地了解数据包的传输过程。 总之,ESP8266 RTOS SDK中的LwIP库应该能够自动处理UDP数据包的分包和重组。您需要确保您的代码正确地处理了这些情况,并检查网络环境以减少数据包丢失的可能性。 |
|
|
|
只有小组成员才能发言,加入小组>>
540浏览 6评论
451浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
433浏览 5评论
435浏览 4评论
406浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-15 10:09 , Processed in 0.915623 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号