完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
[C] 纯文本查看 复制代码
if((recv_err = netconn_recv(newconn,&recvbuf)) == ERR_OK) //接收到数据 { OS_CRItiCAL_ENTER(); //关中断 memset(tcp_server_recvbuf,0,TCP_SERVER_RX_BUFSIZE); //数据接收缓冲区清零 for(q=recvbuf->p;q!=NULL;q=q->next) //遍历完整个pbuf链表 { //判断要拷贝到TCP_SERVER_RX_BUFSIZE中的数据是否大于TCP_SERVER_RX_BUFSIZE的剩余空间,如果大于 //的话就只拷贝TCP_SERVER_RX_BUFSIZE中剩余长度的数据,否则的话就拷贝所有的数据 if(q->len > (TCP_SERVER_RX_BUFSIZE-data_len)) { memcpy(tcp_server_recvbuf+data_len,q->payload,(TCP_SERVER_RX_BUFSIZE-data_len));//拷贝数据 } else { memcpy(tcp_server_recvbuf+data_len,q->payload,q->len); } data_len += q->len; if(data_len > TCP_SERVER_RX_BUFSIZE) { break; //超出TCP客户端接收数组,跳出 } } OS_CRITICAL_EXIT(); //开中断 data_len=0; //复制完成后data_len要清零。 netbuf_delete(recvbuf); |
|
相关推荐
5个回答
|
|
|
|
|
|
关于上述代码 有些疑问 一是:超出TCP客户端接收数组跳出那里 是指一旦超出,便有数据被遗弃了吗?
二是:这样的读取数据方式只适用于低速数据收发吗? 三:我想用该方式做高速数据收发,目前思路是乒乓操作,读取netbuf中数据,再对数据进行处理,具体该怎么处理呢 或者有别的思路可供参考吗? 先行谢过各位大佬 |
|
|
|
原子哥,关于第一点还是想不通 从代码上看 for循环是遍历所有pbuf,而当超出后,跳出for循环,而后直接调用了netbuf_delete,那假设有剩余的数据,不是随着这个删除操作被丢了吗? 还是说lwip内核还有其他操作,并未体现呢///////////////////////////////////////////////////////
我又做了一次测试 将TCP_SERVER_RX_BUFSIZE大小设置为6 我连续发两次8个数据(01234567) 发现串口打印出来的是两次 0123456 若干次也都是这样 貌似并没有原子哥你说的剩下的下次 再发啊 还是我的理解仍有问题呢 相当疑惑啊 |
|
|
|
求帮助啊 @发烧友 @zuozhongkai 还有各位大侠 先行谢过了啊
|
|
|
|
原子哥,关于你说的下次传送应该是不成立的 当次传输完成后 netbuf是被删除了的,另外在下次数据来之后,对tcp_server_recvbuf又做了清零操作,所以该部分数据应该是被丢了的
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2560 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2346 浏览 5 评论
3178 浏览 3 评论
2825 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2777 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
634浏览 1评论
881浏览 0评论
997浏览 0评论
646浏览 0评论
474浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 23:35 , Processed in 1.058792 second(s), Total 84, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号