找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 2499|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

求救:lwip連接無反應(yīng)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:689180 發(fā)表于 2020-8-9 02:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 kael_wyh 于 2020-8-9 02:30 編輯

1、如果開始的時候服務(wù)器是開啟狀態(tài),那么所有狀態(tài)都正常
2、如果服務(wù)器關(guān)閉后,lwip連接斷開,然后服務(wù)器開啟,lwip重新創(chuàng)建tcp,會出現(xiàn)連接無反應(yīng),狀態(tài)一直是23、這情況也會出現(xiàn)在從一開始服務(wù)器就關(guān)閉,然后等重連幾次后開啟服務(wù)器,也會出現(xiàn)連接無反應(yīng)
4、代碼都走到了重連地方
代碼:
  1. cpcb = pCon->cpcb;
  2. if( isErrorState(cpcb->state) || pCon->lastSendStatus==0 )//
  3. {
  4.         pCon->isConnected = 0;
  5.         
  6.         if( time - pCon->connectTime > 10000 ) //等10秒
  7.         {
  8.                 pCon->connectTime = time;
  9.                 pCon->lastSendTime = time;
  10.                 pCon->lastSendStatus = 1;
  11.                
  12.                 tcp_close(cpcb);
  13.                
  14.                 if( isDebug ) printf( "reconnected: %d, %d\r\n", cpcb->state, getActivePcbCount() );
  15.                
  16.                 pCon->cpcb = TCP_Client_Init( pCon, getLocalPort(), 0, pCon->ips[0], pCon->ips[1], pCon->ips[2], pCon->ips[3] );
  17.         }
  18. }
復(fù)制代碼
  1. struct tcp_pcb * TCP_Client_Init( Con *pCon, u16_t local_port, u32 remove_ip, unsigned char a,unsigned char b,unsigned char c,unsigned char d)
  2. {
  3.     u8 t;
  4.         struct ip_addr ipaddr;
  5.         struct tcp_pcb *tcp_client_pcb;
  6.    
  7.         err_t err;
  8.    
  9.     if( remove_ip==0 )
  10.         IP4_ADDR(&ipaddr,a,b,c,d);           //服務(wù)器IP地址
  11.     else ipaddr.addr = remove_ip;
  12.    
  13.         tcp_client_pcb = tcp_new(); /* 建立通信的TCP控制塊(Clipcb) */
  14.     if (!tcp_client_pcb)
  15.         {
  16.         trace( "tcp new null\r\n" );
  17.                 return NULL;
  18.         }
  19.     pCon->cpcb = tcp_client_pcb;
  20.    
  21.     tcp_client_pcb->flags |= (TF_NODELAY);
  22.     tcp_client_pcb->so_options |= SOF_KEEPALIVE;
  23.     tcp_client_pcb->nrtx = 0;
  24.    
  25.         err = tcp_bind(tcp_client_pcb,IP_ADDR_ANY,local_port); /* 綁定本地IP地址和端口號 ,本地ip地址在LwIP_Init()中已經(jīng)初始化*/

  26.     if(err != ERR_OK)
  27.         {
  28.         tcp_close(tcp_client_pcb);
  29.         trace( "tcp bind error\r\n" );
  30.                 return NULL;
  31.         }
  32.         if( ERR_OK != (t = tcp_connect(tcp_client_pcb,&ipaddr,pCon->port,TCP_Connected)) )
  33.     {
  34.         if( isDebug ) printf( "connect error: %d\r\n", t );
  35.     }
  36.    
  37.         tcp_recv(tcp_client_pcb,TCP_Client_Recv);                                 /* 設(shè)置tcp接收回調(diào)函數(shù) */
  38.     tcp_err( tcp_client_pcb, tcp_error_callback );
  39.    
  40.     return tcp_client_pcb;
  41. }
復(fù)制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:522756 發(fā)表于 2020-8-11 10:10 | 只看該作者
不是很懂你說的問題
tcp思路
①初始化lwip
②建立tcp服務(wù)器或者客戶端
③建立tcp連接(三次握手)
④循環(huán)發(fā)送、接收數(shù)據(jù)
.
.
最后斷開連接(四次揮手)
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表