天线|RF射频
直播中

徐丹

7年用户 291经验值
私信 关注
[问答]

怎么判断lwip客户端中网络连接还在不在?

下面是我的程序,能实现收发功能了。但是前提必须是我先把服务器打开,再运行程序才能连接上服务器进行传输。如果我先运行程序,再打开服务器就连不上了。
因此我想问一下我在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)

陆英史

2019-8-13 06:19:31
自己顶一下
举报

徐丽丽

2019-8-13 06:25:30
帮顶
举报

刘锦

2019-8-13 06:43:34
你是说周期性的判断pcb->state的值,如果处于关闭状态就代表网络连接已经断开?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分