完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
下面是我的程序,能实现收发功能了。但是前提必须是我先把服务器打开,再运行程序才能连接上服务器进行传输。如果我先运行程序,再打开服务器就连不上了。
因此我想问一下我在main里的循环程序里,怎么判断网络连接还在不在,不在的话我怎么重新连接?void tcp_client_init(void){uint16_t ei;IP4_ADDR(&ipaddr, 192, 168, 100, 174); //????tPCB = tcp_new();TPCD = tpcb;if(tpcb != NULL){ei = tcp_bind(tpcb, IP_ADDR_ANY, 3000);if(ei == ERR_OK){ tcp_connect(tpcb, &ipaddr, 3000, tcp_client_accept);}}}err_t tcp_client_accept(void *arg, struct tcp_pcb *tpcb, err_t err){tcp_recv(tpcb, tcp_client_recv);return ERR_OK; } //TCP的接收函数static err_t tcp_client_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err){uint8_t Data_len;tcp_recved(tpcb, p->tot_len);//接收到的数据存在了 p->payload地址下Data_len = p->len;tcp_write(tpcb,p->payload,Data_len,1); //接收到的数据回传pbuf_free(p); //把接收缓冲区清空return ERR_OK;} uint16_t tcp_ei;int main(void){ /* Configure ethernet (GPIOs, clocks, MAC, DMA) */ ETH_BSP_Config(); /* Initilaize the LwIP stack */ LwIP_Init(); tcp_client_init(); /* Infinite loop */ while (1) { /* check if any packet received 下面几条语句以后放到任务里?任务切换要及时?*/if (ETH_CheckFrameReceived()){ /* process received ethernet packet */ LwIP_Pkt_Handle();}/* handle periodic timers for LwIP */LwIP_Periodic_Handle(LocalTime); } } |
|
相关推荐
3个回答
|
|
自己顶一下
|
|
|
|
|
|
你是说周期性的判断pcb->state的值,如果处于关闭状态就代表网络连接已经断开?
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2573 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2367 浏览 5 评论
3216 浏览 3 评论
2841 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2795 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
673浏览 1评论
911浏览 0评论
1032浏览 0评论
675浏览 0评论
507浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 07:32 , Processed in 1.171191 second(s), Total 82, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号