0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于LwIP的TCP客戶端設(shè)計(jì)

CHANBAEK ? 來源:木南創(chuàng)智 ? 作者:尹家軍 ? 2022-12-14 15:12 ? 次閱讀

上一篇我們基于LwIP協(xié)議棧的RAW API實(shí)現(xiàn)了一個(gè)TCP服務(wù)器的簡單應(yīng)用,接下來一節(jié)我們來實(shí)現(xiàn)一個(gè)TCP客戶端的簡單應(yīng)用。

1 、 TCP****簡述

TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC 793定義。在簡化的計(jì)算機(jī)網(wǎng)絡(luò)OSI模型中,它完成第四層傳輸層所指定的功能,與用戶數(shù)據(jù)報(bào)協(xié)議(UDP)是同一層內(nèi)的,另一個(gè)重要的傳輸協(xié)議。在因特網(wǎng)協(xié)議族(Internet protocol suite)中,TCP層是位于IP層之上,應(yīng)用層之下的中間層。不同主機(jī)的應(yīng)用層之間經(jīng)常需要可靠的、像管道一樣的連接,但是IP層本身不提供這樣的流機(jī)制,而是提供不可靠的包交換,恰好TCP協(xié)議不足了這一應(yīng)用需求。

應(yīng)用層向TCP層發(fā)送用于網(wǎng)間傳輸?shù)摹⒂?位字節(jié)表示的數(shù)據(jù)流,然后TCP把數(shù)據(jù)流分區(qū)成適當(dāng)長度的報(bào)文段。之后TCP把結(jié)果包傳給IP層,由它來通過網(wǎng)絡(luò)將包傳送給接收端實(shí)體的TCP層。TCP為了保證不發(fā)生丟包,就給每個(gè)包一個(gè)序號,同時(shí)序號也保證了傳送到接收端實(shí)體的包的按序接收。然后接收端實(shí)體對已成功收到的包發(fā)回一個(gè)相應(yīng)的確認(rèn)(ACK);如果發(fā)送端實(shí)體在合理的往返時(shí)延(RTT)內(nèi)未收到確認(rèn),那么對應(yīng)的數(shù)據(jù)包就被假設(shè)為已丟失將會被進(jìn)行重傳。TCP用一個(gè)校驗(yàn)和函數(shù)來檢驗(yàn)數(shù)據(jù)是否有錯(cuò)誤;在發(fā)送和接收時(shí)都要計(jì)算校驗(yàn)和,以確保數(shù)據(jù)的正確性。TCP協(xié)議的數(shù)據(jù)包結(jié)構(gòu)如下:

TCP數(shù)據(jù)包中各部分的含義如下:

1 )源端口和目標(biāo)端口

源端口和目標(biāo)端口各占2個(gè)字節(jié)。用來告知主機(jī)該報(bào)文段是來自哪里以及傳送給哪里。進(jìn)行 TCP 通訊時(shí),客戶端通常使用系統(tǒng)自動選擇的臨時(shí)端口號,而服務(wù)器則根據(jù)應(yīng)用不同使用知名服務(wù)端口號。

2 )序列號

序列號占4個(gè)字節(jié)。 TCP是面向字節(jié)流的,在一個(gè) TCP 連接中傳輸?shù)淖止?jié)流中的每個(gè)字節(jié)都按照順序編號。 由于序列號由32位表示,所以最大值為2的32次方,序號增加到最大值的時(shí)候,下一個(gè)序號又回到了0。也就是說 TCP 協(xié)議可對 4GB 的數(shù)據(jù)進(jìn)行編號,在一般情況下可保證當(dāng)序號重復(fù)使用時(shí),舊序號的數(shù)據(jù)早已經(jīng)通過網(wǎng)絡(luò)到達(dá)終點(diǎn)或者丟失了。

3 )確認(rèn)號

確認(rèn)號也是占4個(gè)字節(jié)。表示期望收到對方下一個(gè)報(bào)文段的序號值。 表明該序號之前的所有數(shù)據(jù)已經(jīng)正確無誤的收到。確認(rèn)號只有當(dāng)ACK標(biāo)志為1時(shí)才有效。

4 TCP****首部長度

TCP首部長度也稱為數(shù)據(jù)偏移占半個(gè)字節(jié) (4 位)。 它指出了 TCP報(bào)文段的數(shù)據(jù)起始處距離TCP報(bào)文的起始處有多遠(yuǎn)。當(dāng)了解了LwIP中TCP存儲數(shù)據(jù)結(jié)構(gòu)后,會發(fā)現(xiàn)這個(gè)值是很有用的。

5 TCP****標(biāo)志位

TCP標(biāo)志位,一共有 6 個(gè),分別占 1 位,共 6 位 。每一位的值只有0和 1,分別表達(dá)不同意思。

  • URG 標(biāo)志 ,稱為緊急標(biāo)志,當(dāng)URG=1的時(shí)候,表示緊急指針有效。它告訴系統(tǒng)此報(bào)文段中有緊急數(shù)據(jù),應(yīng)盡快傳送,而不要按原來的排隊(duì)順序來傳送。URG標(biāo)志要與首部中的“緊急指針”字段配合使用。
  • ACK 標(biāo)志 ,稱為確認(rèn)標(biāo)志,當(dāng)ACK=1的時(shí)候,確認(rèn)號有效。一般稱帶有ACK標(biāo)志的TCP報(bào)文段為“確認(rèn)報(bào)文段”。TCP規(guī)定,在連接建立后所有傳送的報(bào)文段都必須把ACK設(shè)置為1。
  • PSH 標(biāo)志 ,稱為推送標(biāo)志,當(dāng)PSH = 1的時(shí)候,表示該報(bào)文段高優(yōu)先級,接收方TCP應(yīng)該盡快推送給接收應(yīng)用程序,而不用等到整個(gè)TCP緩存都填滿了后再交付。
  • RST 標(biāo)志 ,稱為復(fù)位標(biāo)志,當(dāng)RST =1的時(shí)候,表示TCP連接中出現(xiàn)嚴(yán)重錯(cuò)誤,需要釋放并重新建立連接。一般稱攜帶RST標(biāo)志的TCP報(bào)文段為“復(fù)位報(bào)文段”。
  • SYN 標(biāo)志 ,稱為同步標(biāo)志,當(dāng)SYN = 1的時(shí)候,表明這是一個(gè)請求連接報(bào)文段。一般稱攜帶SYN標(biāo)志的TCP報(bào)文段為“同步報(bào)文段”。在TCP 三次握手中的第一個(gè)報(bào)文就是同步報(bào)文段,在連接建立時(shí)用來同步序號。 對方若同意建立連接,則應(yīng)在響應(yīng)的報(bào)文段中使SYN = 1和ACK = 1。
  • FIN 標(biāo)志 ,稱為終止標(biāo)志,當(dāng)FIN = 1時(shí),表示此報(bào)文段的發(fā)送方的數(shù)據(jù)已經(jīng)發(fā)送完畢,并要求釋放TCP連接。 一般稱攜帶FIN的報(bào)文段為“結(jié)束報(bào)文段”。在TCP四次揮手釋放連接的時(shí)候,就會用到該標(biāo)志。

6 )窗口大小

窗口大小占2字節(jié)。該字段明確指出了現(xiàn)在允許對方發(fā)送的數(shù)據(jù)量,它告訴對方本端的TCP接收緩沖區(qū)還能容納多少字節(jié)的數(shù)據(jù),這樣對方就可以控制發(fā)送數(shù)據(jù)的速度。窗口大小的值是指,從本報(bào)文段首部中的確認(rèn)號算起,接收方目前允許對方發(fā)送的數(shù)據(jù)量。

7 )校驗(yàn)和

校驗(yàn)和占2個(gè)字節(jié)。由發(fā)送端填充,接收端對 TCP 報(bào)文段執(zhí)行 CRC 算法,以檢驗(yàn) TCP 報(bào)文段在傳輸過程中是否損壞,如果損壞這丟棄。檢驗(yàn)范圍包括首部和數(shù)據(jù)兩部分,這也是 TCP 可靠傳輸?shù)囊粋€(gè)重要保障。

8 )緊急指針

緊急指針占2個(gè)字節(jié)。僅在URG=1時(shí)才有意義,它指出本報(bào)文段中的緊急數(shù)據(jù)的字節(jié)數(shù)。 當(dāng)URG = 1時(shí),發(fā)送方TCP就把緊急數(shù)據(jù)插入到本報(bào)文段數(shù)據(jù)的最前面,而在緊急數(shù)據(jù)后面的數(shù)據(jù)仍是普通數(shù)據(jù)。因此,緊急指針指出了緊急數(shù)據(jù)的末尾在報(bào)文段中的位置。

2 TCP****客戶端設(shè)計(jì)

我們已經(jīng)對TCP協(xié)議及其報(bào)文格式做了簡單說明,接下來我們將結(jié)合LwIP協(xié)議棧,使用RAW API實(shí)現(xiàn)一個(gè)TCP客戶端的簡單應(yīng)用。

2.1 TCP相關(guān)的RAW API****函數(shù)

在開始實(shí)現(xiàn)TCP服務(wù)器之前,我們首先來看一看LwIP中與TCP相關(guān)的RAW API函數(shù)有哪些。并簡單的了解一下其功能。

1 )、建立TCP連接的API函數(shù):

2 )、發(fā)送TCP數(shù)據(jù)的API函數(shù):

3 )、接收TCP數(shù)據(jù)的API函數(shù):

4 )、 TCP輪詢API****函數(shù):

5 )、關(guān)閉和中止TCP連接的API函數(shù):

2.2 、 TCP****客戶端的工作流程

我們已經(jīng)了解了LwIP中實(shí)現(xiàn)TCP的RAW API函數(shù),也有了實(shí)現(xiàn)TCP服務(wù)器的經(jīng)驗(yàn),現(xiàn)在我們來實(shí)現(xiàn)一個(gè)客戶端操作??蛻舳说墓ぷ髁鞒涛覀兒唵蚊枋鋈缦拢?/p>

1 )、新建控制快

使用tcp_new()函數(shù)建立一個(gè)TCP控制塊。

2 )、綁定控制塊

對于客戶端來說,并不需要顯性的調(diào)用tcp_bind函數(shù)來為其綁定IP和端口,因?yàn)樵诳蛻舳讼蚍?wù)器發(fā)起連接時(shí),LwIP內(nèi)核會自動為客戶端控制塊綁定一個(gè)端口。但如果用戶確實(shí)想顯示使用也沒有問題。

3 )、建立連接

對于客戶端程序來說,它需要主動發(fā)起會話,應(yīng)為服務(wù)器一直在等待中,所以客戶端需要向服務(wù)器發(fā)送一個(gè)SYN握手報(bào)文。這一過程使用tcp_connect函數(shù)來完成。同時(shí)會注冊一個(gè)連接完成回調(diào)函數(shù),因?yàn)樵谶B接建立后,內(nèi)核就會調(diào)用這個(gè)函數(shù)。

4 )、發(fā)送請求

使用tcp_write函數(shù)發(fā)送一個(gè)數(shù)據(jù)通訊請求,當(dāng)然要以服務(wù)器能夠理解的形式。其實(shí)就是告訴服務(wù)器,客戶端有什么想要做的,然后等待服務(wù)器的反饋。

5 )、接收數(shù)據(jù)并處理

一旦連接成功,connect完成回調(diào)函數(shù)會調(diào)用tcp_recv函數(shù)注冊一個(gè)接收完成的處理函數(shù)。對于客戶端來說,接收到服務(wù)器返回的數(shù)據(jù),就會調(diào)用這一回調(diào)函數(shù)進(jìn)行處理。然后其處理過程與服務(wù)器類似:接收到數(shù)據(jù)后,首先通知更新接受窗口(使用tcp_recved函數(shù)),處理并發(fā)送數(shù)據(jù)(使用tcp_write函數(shù)),數(shù)據(jù)發(fā)送成功則清除已發(fā)送的數(shù)據(jù)(使用tcp_sent函數(shù)),最后關(guān)閉連接(使用函數(shù)tcp_close)。

用流程圖表述如下:

在上述流程圖中我們列出了每一環(huán)節(jié)所用到的主要函數(shù),其他一些函數(shù)用到了但未列出,有興趣可以免查閱源碼或者看相關(guān)的手冊。

2.3 、常用端口

TCP所使用的端口有很多與UDP是相同的,也有一些不一樣。為了方便操作我們已經(jīng)將常用的端口以宏定義的形式存儲在一個(gè)文件中?,F(xiàn)將常用的端口列于下,我們也是使用下列端口來實(shí)現(xiàn)我們的操作。

對于端口這塊奇石前面已經(jīng)描述過了,在這里只是簡單的說一下,因?yàn)槲覀儗?shí)現(xiàn)的功能比較簡單,依然使用TCP回環(huán)協(xié)議端口。

3 、 TCP****客戶端實(shí)現(xiàn)

經(jīng)過上述的分析以及我們前面實(shí)現(xiàn)TCP服務(wù)器的經(jīng)驗(yàn),實(shí)現(xiàn)TCP客戶端已經(jīng)沒有問題。我們將TCP客戶端分成4個(gè)函數(shù)來實(shí)現(xiàn)。首先依然是實(shí)現(xiàn)TCP客戶端的初始化:

1 /* TCP客戶端初始化 */
 2 void Tcp_Client_Initialization(void)
 3 {
 4   struct tcp_pcb *tcp_client_pcb;
 5   ip_addr_t ipaddr;
 6  
 7   /* 將目標(biāo)服務(wù)器的IP寫入一個(gè)結(jié)構(gòu)體,為pc機(jī)本地連接IP地址 */
 8   IP4_ADDR(&ipaddr,serverIP[0],serverIP[1],serverIP[2],serverIP[3]);
 9  
10   /* 為tcp客戶端分配一個(gè)tcp_pcb結(jié)構(gòu)體    */
11   tcp_client_pcb = tcp_new();
12  
13   /* 綁定本地端號和IP地址 */
14   tcp_bind(tcp_client_pcb, IP_ADDR_ANY, TCP_CLIENT_PORT);
15  
16   if (tcp_client_pcb != NULL)
17   {
18     /* 與目標(biāo)服務(wù)器進(jìn)行連接,參數(shù)包括了目標(biāo)端口和目標(biāo)IP */
19     tcp_connect(tcp_client_pcb, &ipaddr, TCP_SERVER_PORT, TCPClientConnected);
20    
21     tcp_err(tcp_client_pcb, TCPClientConnectError);
22   }
23 }

上述初始化的代碼很簡單,有兩個(gè)地方需要說一下:一是使用tcp_connect注冊連接完成的處理回調(diào)函數(shù);二是使用tcp_err注冊了連接錯(cuò)誤處理回調(diào)函數(shù)。很明顯接下來我們需要實(shí)現(xiàn)這兩個(gè)函數(shù)。

連接到服務(wù)器成功后的回調(diào)函數(shù)是tcp_connected_fn類型。在客戶端建立一個(gè)連接后,內(nèi)核會調(diào)用這個(gè)函數(shù)。在這個(gè)函數(shù)中,客戶端回想服務(wù)器發(fā)送最初的操作請求,并且會在這個(gè)函數(shù)中注冊數(shù)據(jù)接收處理回調(diào)函數(shù)。

1 /* TCP客戶端連接到服務(wù)器回調(diào)函數(shù) */
 2 static err_t TCPClientConnected(void *arg, struct tcp_pcb *pcb, err_t err)
 3 {
 4   char clientString[]="This is a new client connection.\\r\\n";
 5  
 6   /* 配置接收回調(diào)函數(shù) */
 7   tcp_recv(pcb, TCPClientCallback);
 8  
 9   /* 發(fā)送一個(gè)建立連接的問候字符串*/
10   tcp_write(pcb,clientString, strlen(clientString),0);
11  
12   return ERR_OK;
13 }

對于TCP客戶端連接服務(wù)器錯(cuò)誤回調(diào)函數(shù),它是tcp_err_fn類型,在這個(gè)程序中主要完成連接異常結(jié)束時(shí)的一些處理,可以釋放一些必要的資源。在這個(gè)函數(shù)被內(nèi)核調(diào)用時(shí),連接實(shí)際上已經(jīng)斷開,相關(guān)控制塊也已經(jīng)被刪除。所以在這個(gè)函數(shù)中我們可以重新初始化連接及其資源。在這里額我們就是使用它來重新初始化TCP客戶端。

1 /* TCP客戶端連接服務(wù)器錯(cuò)誤回調(diào)函數(shù) */
2 static void TCPClientConnectError(void *arg, err_t err)
3 {
4   /* 重新啟動連接 */
5   Tcp_Client_Initialization();
6 }

最后我們需要實(shí)現(xiàn)的是TCP客戶端接收到數(shù)據(jù)后的數(shù)據(jù)處理回調(diào)函數(shù)。這個(gè)函數(shù)其實(shí)就是我們前面連接成功時(shí),注冊過的TCP客戶端數(shù)據(jù)接收處理函數(shù)。這個(gè)函數(shù)是tcp_recv_fn類型。這是使用RAW API實(shí)現(xiàn)TCP客戶端功能最重要的一個(gè)函數(shù),因?yàn)樗鼪Q定TCP客戶端的具體功能。

1 /* TCP客戶端接收到數(shù)據(jù)后的數(shù)據(jù)處理回調(diào)函數(shù) */
 2 static err_t TCPClientCallback(void *arg, struct tcp_pcb *pcb, struct pbuf *tcp_recv_pbuf, err_t err)
 3 {
 4   struct pbuf *tcp_send_pbuf;
 5   char echoString[]="This is the server content echo:\\r\\n";
 6  
 7   if (tcp_recv_pbuf != NULL)
 8   {
 9     /* 更新接收窗口 */
10     tcp_recved(pcb, tcp_recv_pbuf->tot_len);
11  
12     /* 將接收到的服務(wù)器內(nèi)容回顯*/
13     tcp_write(pcb,echoString, strlen(echoString), 1);
14     tcp_send_pbuf = tcp_recv_pbuf;
15     tcp_write(pcb, tcp_send_pbuf->payload, tcp_send_pbuf->len, 1);
16  
17     pbuf_free(tcp_recv_pbuf);
18   }
19   else if (err == ERR_OK)
20   {
21     tcp_close(pcb);
22     Tcp_Client_Initialization();
23  
24     return ERR_OK;
25   }
26  
27   return ERR_OK;
28 }

到這里,我們就實(shí)現(xiàn)了一個(gè)簡單的TCP客戶端。對于TCP客戶端的具體功能就在于就收處理回調(diào)函數(shù)的實(shí)現(xiàn)了。具體的應(yīng)用只是功能上的復(fù)雜程度不一樣,結(jié)構(gòu)上是一樣的。

4 、結(jié)論

本篇我們基于LwIP實(shí)現(xiàn)了簡單的TCP客戶端應(yīng)用。通過回調(diào)函數(shù)的實(shí)現(xiàn)方式,整個(gè)過程與TCP服務(wù)器的實(shí)現(xiàn)基本類似。我們用設(shè)計(jì)的TCP客戶端去連接TCP服務(wù)器應(yīng)用,測試連接都沒有問題。當(dāng)然,我們可以在此基礎(chǔ)上設(shè)計(jì)更復(fù)雜的應(yīng)用層協(xié)議實(shí)現(xiàn)我們想要的功能,只需要在回調(diào)函數(shù)中添加處理就可以了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9246

    瀏覽量

    85730
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1374

    瀏覽量

    79157
  • 客戶端
    +關(guān)注

    關(guān)注

    1

    文章

    290

    瀏覽量

    16724
  • LwIP
    +關(guān)注

    關(guān)注

    2

    文章

    87

    瀏覽量

    27248
收藏 人收藏

    評論

    相關(guān)推薦

    LWIPTCP客戶端測試前兩個(gè)字節(jié)不顯示還出現(xiàn)延遲

    _abort(tpcb);//終止連接,刪除pcb控制塊ret_err=ERR_ABRT;}return ret_err;} 我把整個(gè)工程發(fā)上來。大神給看看啊 TCP客戶端無DHCP版.rar (7.88 MB )
    發(fā)表于 07-04 04:35

    lwipTCP客戶端返回不了數(shù)據(jù)該怎么辦?

    err = netconn_connect(tcp_clientconn,&server_ipaddr,9100);這句話好像是阻塞的,所以返回不了數(shù)據(jù)啊,我的現(xiàn)象是程序開機(jī)前,先建立服務(wù)器就沒問題,如果開機(jī)以后再建立服務(wù)器,就連接不上,而且程序一直卡在這,想重連都不行
    發(fā)表于 07-16 04:35

    為什么lwip tcp客戶端無法連接?

    如題,用的戰(zhàn)艦開發(fā)板,原子提供的例子,ping得通,但是網(wǎng)絡(luò)助手提示沒有連接,提示如下:
    發(fā)表于 08-21 21:55

    為什么LWIP TCP客戶端測試中總是出現(xiàn)數(shù)據(jù)掉包和數(shù)據(jù)重發(fā)現(xiàn)象?

    參考發(fā)燒友網(wǎng)絡(luò)實(shí)驗(yàn)中的TCP CLIENT測試移植的程序,將STM32作為客戶端,電腦作為服務(wù)器,STM32連續(xù)發(fā)送數(shù)據(jù)給服務(wù)器時(shí),發(fā)送一定次數(shù)的數(shù)據(jù)后數(shù)據(jù)就發(fā)不上去了,在服務(wù)器用抓包軟件看,發(fā)現(xiàn)是數(shù)據(jù)掉包和數(shù)據(jù)重發(fā)的問題,請
    發(fā)表于 08-30 04:36

    為什么STM32F746G-Discovery板lwip tcp客戶端無法建立連接?

    ,但是并未成功,這個(gè)例程原本是一個(gè)基于tcp連接的一個(gè)http服務(wù)器,然后我改了里面的http_server_netconn_thread函數(shù)參考f7教程里的tcp客戶端例程修改了,發(fā)現(xiàn)一只卡在
    發(fā)表于 09-25 00:40

    LWIP TCP客戶端硬件出現(xiàn)以下錯(cuò)誤該怎么辦?

    將《網(wǎng)絡(luò)實(shí)驗(yàn)8 NETCONN_TCP 客戶端》Demo移植到項(xiàng)目中后,LWIP TCP客戶端 發(fā)送消息的時(shí)候,產(chǎn)生hardFault中
    發(fā)表于 10-27 23:12

    為什么LWIPTCP客戶端服務(wù)器斷開后繼續(xù)發(fā)送數(shù)據(jù)就無法檢測到連接狀態(tài)?

    發(fā)現(xiàn)LWIPTCP客戶端有個(gè)BUG,當(dāng)服務(wù)器開之后,如果還繼續(xù)發(fā)送數(shù)據(jù),那就不能檢測到連接狀態(tài)。求助求助
    發(fā)表于 10-29 20:26

    為什么我不能用DHCP獲取動態(tài)IP地址?

    請問一下,我用開發(fā)板源程序做帶系統(tǒng)的LWIP_TCP客戶端實(shí)驗(yàn)時(shí),為什么我不能用DHCP獲取動態(tài)IP地址,只能是靜態(tài)IP地址,我看DHCP的定義為1,請問該如何解決呢?(其中開發(fā)板為stm32f103)@zuozhongkai
    發(fā)表于 11-07 04:21

    為什么戰(zhàn)艦開發(fā)板的LWIPTCP客戶端實(shí)驗(yàn)不能和PC連接在一起?

    探索者開發(fā)板的LWIP擴(kuò)展例程中的網(wǎng)絡(luò)實(shí)驗(yàn)4 RAW_TCP客戶端實(shí)驗(yàn)和網(wǎng)絡(luò)實(shí)驗(yàn)8 NETCONN_TCP 客戶端例程為什么不能和PC連接在
    發(fā)表于 11-06 22:03

    使用LwIPtcp客戶端tcp服務(wù)器都結(jié)合起來使用就卡死了

    大家好,使用LwIPtcp 客戶端tcp服務(wù)器都沒有問題,但是結(jié)合起來使用就卡死了 怎么辦? 經(jīng)過調(diào)試分析是卡在了tcp_active
    發(fā)表于 03-18 04:22

    FreeRTOS+Lwip TCP客戶端只能和一個(gè)接收

    求助高手幫忙 我用F407 實(shí)現(xiàn) FreeRTOS+LwIP客戶端程序現(xiàn)在的問題是用網(wǎng)絡(luò)調(diào)試助手建立TCPserver連接后 收發(fā)數(shù)據(jù)確實(shí)沒什么問題 ,但是2臺F407設(shè)備的客戶端連接后 只能
    發(fā)表于 03-19 00:58

    F407的LWIP TCP客戶端實(shí)驗(yàn)連接不上

    F407,我開始用的UDP,可以連接也可以發(fā)送數(shù)據(jù),可是TCP客戶端實(shí)驗(yàn)下栽進(jìn)去了無法連接,請問這個(gè)可能是什么問題呢
    發(fā)表于 03-23 22:01

    基于lwipTCP客戶端同時(shí)連接雙服務(wù)器連接不上

    的程序求大神應(yīng)該怎么實(shí)現(xiàn),問題出在哪兒下面是主要程序//tcp客戶端任務(wù)函數(shù)static void tcp_client_thread(void *arg){OS_CPU_SR cpu_sr;u32
    發(fā)表于 03-25 02:03

    stm32f107vc lwip tcp客戶端

    stm32f107vc lwip tcp客戶端 服務(wù)器數(shù)據(jù)傳輸?shù)谝黄?b class='flag-5'>TCP客戶端模式簡單數(shù)據(jù)收發(fā) ----控制開發(fā)板LED燈概要建立
    發(fā)表于 08-06 09:17

    如何去實(shí)現(xiàn)stm32f107vc lwip tcp客戶端服務(wù)器的數(shù)據(jù)傳輸呢

    怎么去建立LWIP客戶端模式呢?如何去實(shí)現(xiàn)stm32f107vc lwip tcp客戶端服務(wù)器的數(shù)據(jù)傳輸呢?
    發(fā)表于 11-04 06:54