完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
那就改啊,将poll中发送的数据的过程做成一个函数来发送!每次发送数据的时候直接调用这个函数就行了
|
|
|
|
....系统调用的poll,再里面已经看不懂了。。。
|
|
|
|
慢慢学啊
|
|
|
|
LWIP的作者既然提供了此接口必然有其作用及道理,LWIP会提供愚蠢的接口的话,那我们不都可以去撞墙了
首先,你得弄明白这个poll定时回调的作用及意义是什么,此回调函数是让使用者定期 “针对当前连接” 进行一些操作,比如你的例子里面的发送数据。1.注意回调函数的第二个参数,它就是 “当前连接”的pcb控制块,你就可以在此回调函数中使用这个pcb块来针对当前连接进行操作,因为TCP是可以多连接的。 2.此函数是LWIP系统回调,它可以最大程度保证传递给你的当前pcb控制块的有效性。 举例说: 1. 你新建了一个服务器pcb: struct tcp_pcb *server_pcb = tcp_new(); 然后绑定,监听,设置accept回调; 2. 这时个有两个客户端A和B连接到了你的服务器,自动为两个新连接建立各自的pcb控制块,控制块以参数的形式传递给accept回调。 3.这时候服务器想给B连接发送数据,好家伙,怎么发,你只有server_pcb这个服务器控制块,直接tcp_write(server_pcb...) ?协议栈根本不知道你要发给A还是B 但是你在poll回调中就可以使用参数里的pcb正确的给此连接发送数据。 那么说,我不进行其它操作,只是要发数据而已,又不想使用poll回调可以么(poll回调设置为null: tcp_poll(pcb,null....)? 当然可以: 方法1:在recv回调中使用参数传递的pcb来发送数据. (如果你的数据接收是用中断实现的,那么最好不要使用此方法;而且必须等到客户给你发数据后你才能回发,不能主动发) 方法2:在accept回调函数中新建一个pcb来保存此连接的pcb: struct tcp_pcb *client_pcb[x]; int client_count=0; accept_callback(void *arg,struct tcp_pcb *new_pcb,err_t err) { ...... client_pcb[client_count++] = new_pcb; } 然后你就可以在任何地方使用tcp_write(client_pcb[x])来给指定客户发数据了。(此方法你需要自己去保证在pcb的有效性) 好了,看了以上两种无poll的实现方法,我想你应该对poll回调函数的存在意义有一定的理解了吧。 |
|
|
|
感谢!
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2535 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2320 浏览 5 评论
3128 浏览 3 评论
2790 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2748 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
591浏览 1评论
842浏览 0评论
949浏览 0评论
604浏览 0评论
426浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 05:38 , Processed in 0.983448 second(s), Total 84, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号