多個客戶端連TCP_Server就有問題,lwIP的這個Bug,你一定要小心
怎麼去下載lwIP的源碼,怎麼去查看lwIP的buglist 這裡給出幾個lwIP官網的連結 lwIP官網:http://savannah.nongnu.org/projects/lwip/ lwIP的源碼下載地址:http://download.savannah.nongnu.org/releases/lwip/ lwIP的buglist查看:http://savannah.nongnu.org/bugs/?group=lwip TCP 的長連接與短連接 通常來說 TCP 有長連接與短連接之分。 長連接與短連接的區別在於: 長連接在連接建立以後,可以進行多次數據交互,通信完成以後再斷開連接,因為連接持續的時間比較長,所以叫長連接。 短連接是每進行一次數據交互都要按照建立連接 - 》數據交互 - 》斷開連接的 流程進行。因為每一次連接持續的時間比較短,所以叫短連接。 lwIP 協議在處理短連接時候的 bug 通常來說我們用的 TCP 客戶端都是基於長連接的,也就是說一旦連接建立以後,就基於這條連接上進行數據交互。比如說我們常用的網絡調試助手,但是也會有基於 TCP 短連接, Client 是長連接還是短連接,取決於客戶需求。但是使用 lwIP 的 RAW 搭建 TCP Server 的時候,要注意 lwIP 本身的一個 bug, 可能會造成基於短連接的客戶端連接問題。 · 問題描述 : TCP 伺服器搭建完成以後,發現使用 TCP 客戶端連接以後 , 剛開始數據交互正常,但是一段時間以後,就無法發送了。 · 問題測試 : 通過 wireshark 抓包發現,在 TCP 每一次發送數據之前都會重新連接,數據發送完成以後都會斷開連接,所以這個 TCP 客戶端是基於短連接的客戶端。 · 問題分析 : wireshark 再次抓包發現, TCP 客戶端已經發出了握手的 SYN 數據包,但 Server 沒有任何的反饋 。於是打開 lwIP 的 TCP 調試選項發現在 tcp_listen_input : #if TCP_LISTEN_BACKLOG if (pcb->accepts_pending >