完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
近日在学习lwip,在网上看到了原子哥的lwip开发手册,非常有帮助,于是按照手册移植了一下,已经可以ping通。
但在继续移植服务器端的时候对tcp_server_senddata函数产生了一些疑问。 在开发板作客户端的时候tcp_client_senddata函数是这样的 [C] 纯文本查看 复制代码 //此函数用来发送数据void tcp_client_senddata(struct tcp_PCB *tpcb, struct tcp_client_struct * es){struct pbuf *ptr; err_t wr_err=ERR_OK;while((wr_err==ERR_OK)&&es->p&&(es->p->len<=tcp_sndbuf(tpcb))){ptr=es->p;wr_err=tcp_write(tpcb,ptr->payload,ptr->len,1); //将要发送的数据加入到发送缓冲队列中if(wr_err==ERR_OK){ es->p=ptr->next;//指向下一个pbufif(es->p)pbuf_ref(es->p);//pbuf的ref加一pbuf_free(ptr);//释放ptr }else if(wr_err==ERR_MEM)es->p=ptr;tcp_output(tpcb);//将发送缓冲队列中的数据立即发送出去} } 而在tcp_server_senddata [C] 纯文本查看 复制代码 //此函数用来发送数据void tcp_server_senddata(struct tcp_pcb *tpcb, struct tcp_server_struct *es){struct pbuf *ptr;u16 plen;err_t wr_err=ERR_OK; while((wr_err==ERR_OK)&&es->p&&(es->p->len<=tcp_sndbuf(tpcb))) {ptr=es->p;wr_err=tcp_write(tpcb,ptr->payload,ptr->len,1);if(wr_err==ERR_OK){ plen=ptr->len;es->p=ptr->next;//指向下一个pbufif(es->p)pbuf_ref(es->p);//pbuf的ref加一pbuf_free(ptr);tcp_recved(tpcb,plen); //更新tcp窗口大小}else if(wr_err==ERR_MEM)es->p=ptr; }} 问题有: 1.服务器发送倒数第二句tcp_recved调用的作用是什么? 2.为什么不掉用tcp_output将数据发送出去? 对lwip这块的初学,请大家指教。 |
|
相关推荐
7个回答
|
|
1、tcp_recve()是用来更新接收窗口大小的,开发板作为服务器的时候要调用,做客户端的时候不需要调用。如果不调用tcp_receve()更新接收窗口的话,会使得服务器上的数据始终不能满足发送的窗口条件,从而导致该方向上的数据发送停止。
2、tcp_output()是将某个连接的TCP控制块中的unsend队列中的数据发送出去,这个函数用户不需要自己调用,因为LWIP在判断要发送的数据达到一定程度的时候会自动调用tcp_output()的,用户应用程序可以不用调用。 |
|
|
|
|
|
|
|
|
|
|
|
期待高人的回复
|
|
|
|
1、因为你要将你的接收窗口大小值发送给对方,对方知道了你的窗口大小下次就会按照这个大小给你发送数据,所以肯定是在发送函数中的
2、理论上可以,但是最好不要直接这样,让LWIP自己来决定 |
|
|
|
1.还是不太明白,将我的接收窗口大小值通知对方,是不是应该在我的接收函数中调用的,我向对方发送了数据,会对我的接收窗口造成影响吗,有点晕了。
2.我大概每5ms要传送1K数据,等LWIP发送处理可能会丢数,我先试试主动调用,看看有没有问题。 |
|
|
|
原子哥为什么用tcp_output(pcb)后并没有清理tcp_write(pcb,data,len,1)复制保存在RAM的数据,write的数据是保存在RAM中的这有关MEM_SIZE值的设置,是不是需要循环中断一次才能清理RAM的数据,MEM_SIZE 要设置很大才能发送大量数据,应用的开发板不可能说是无限大的内存
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2568 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2361 浏览 5 评论
3208 浏览 3 评论
2836 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2787 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
663浏览 1评论
900浏览 0评论
1022浏览 0评论
666浏览 0评论
496浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 14:11 , Processed in 1.162636 second(s), Total 58, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号