lwip TCP client 客戶端 & FreeRTOS


static void tcpecho_thread(void *arg)
{

  ip_addr_t serverIpAddr;
  struct netbuf *buf;
  void *data;
  u16_t len;
  err_t err;
  struct netconn *conn;

  IP4_ADDR(&serverIpAddr,192,168,1,13);// 服務器IP地址
      
  LWIP_UNUSED_ARG(arg);
  
      for( ;; )
      {
                
                printf("正在建立連接服務器到:192.168.1.13 :65000...\r\n");
                
                
                /* Create a new connection identifier. */
                conn = netconn_new(NETCONN_TCP);
                
                if (conn!=NULL)
                {
        
                    /* Netconn connection to Server IP , port number 65000. */
            
                    err = netconn_connect(conn, &serverIpAddr, 65000);
                    
                    if(err == ERR_OK)
                    {

                        printf("TCP Server 192.168.1.13 :65000 連接成功.\r\n");
                        
                        for( ;; )
                        {
                            
                            /* receive data until the other host closes the connection */
                            if((err = netconn_recv(conn, &buf)) == ERR_OK) //這個是死等 TCP 數據
                            {
                                 //獲取一個指向netbuf 結構中的數據的指針

                                 if((err = netbuf_data(buf, &data, &len)) == ERR_OK)
                                 {
                                     
                                        //接收到的數據 轉發給串口1,來達到透傳的目的
                                        comSendBuf(COM1,data,len);
                                     
                                        netbuf_delete(buf);
                                     
                                 }
                                 else
                                 {
                                     printf("err:netbuf_data(buf, &data, &len):%d.\r\n",err);
                                 }
                                
                            }
                            else//if((err = netconn_recv(conn, &buf)) == ERR_OK)
                            {
                                
                                printf("err:netconn_recv(conn, &buf):%d.\r\n",err);
                                
                                netbuf_delete(buf);
                                
                                break;
                            }
                    
                        }

                    }
                
                    printf("TCP Server 192.168.1.13 :65000 連接失敗.\r\n");
                    
                     netconn_close(conn);
                     netconn_delete(conn);
                    
                    /* vTaskDelayUntil是絕對延遲,vTaskDelay是相對延遲。*/
                    vTaskDelay(1000);
                }
                else//(conn!=NULL)
                {
                    printf("Can not create TCP netconn.\r\n");
                    
                    /* vTaskDelayUntil是絕對延遲,vTaskDelay是相對延遲。*/
                    vTaskDelay(1000);
                }

            }
}

1、根據某位大神 總結的經驗!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM