完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
当W5500作为客户端利用TCP协议接收远大于自身缓存的数据包时,服务器一次性发送一个几十M为单位的文件,依靠TCP/IP协议栈维护数据收发的情况下,如何能保障接收的可靠性? 客户端有一个512字节的缓存,在分片字节1460和W5500默认接收发送缓存2K的情况下,要求应用收到512字节数据后立刻发回服务器,继续读取W5500缓存区的数据,并发送直到读空,然后更新RX_RSR寄存器,向服务器获取新的数据,但是经测试,此过程中存在数据乱序的现象,如下图所示: |
|
相关推荐
2 个讨论
|
|
你应该首先读取RX_RSR寄存器判断其是否有接收数据,然后读取数据,更新Sn_RX_RD寄存器值,而不是你说的更新RX_RSR寄存器,RX_RSR是只读的,Sn_RX_RD才是读取数据指针
#define BUFSIZE 512 uint8 buf[BUFSIZE]; recvsize=getSn_RX_RSR(sn);//获取接收缓存数据大小 ptrRead=getSn_RX_RD(sn);//获取接收读指针的值 while(recvsize>0) {if(recvsize>BUFSIZE) {recv_data(sn,buf,BUFSIZE); ptrRead+=BUFSIZE; setSn_RX_RD(ptrRead);//更新读取指针的值 setSn_CR(sn,SOCK_RECV);//执行更新读指针命令 while(getSn_CR(sn);//等待更新命令执行结束 } else {recv_data(sn,buf,recvsize); ptrRead+=recvsize; setSn_RX_RD(ptrRead);//更新读取指针的值 setSn_CR(sn,SOCK_RECV);//执行更新读指针命令 while(getSn_CR(sn);//等待更新命令执行结束} recvsize=getSn_RX_RSR(sn); } |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
479个成员聚集在这个小组
加入小组5102 浏览 1 评论
12134 浏览 5 评论
3507 浏览 2 评论
2975 浏览 0 评论
12711 浏览 2 评论
w5500 作为tcp server,客户端异常发送【RST,ACK】断开连接问题
1730浏览 1评论
1094浏览 0评论
使用stm32,通过spi的dma 收发,运行多次读写以后w5500发送正常,接收卡死,高人帮忙看看
6305浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 02:39 , Processed in 0.499718 second(s), Total 48, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号