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、根據某位大神 總結的經驗!