WIFI實戰應用第四章 ESP32聯網之UDP

學習目的及目標

· 掌握UDP原理和工作過程

· 掌握樂鑫ESP32的UDP的程序設計

· 主要掌握UDP源碼過程

UDP科普(來自百度百科)

UDP 是User Datagram Protocol的簡稱, 中文名是用戶數據報協議,是OSI(Open System Interconnection,開放式系統互聯) 參考模型中一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務,IETF RFC 768是UDP的正式規範。UDP在IP報文的協議號是17。

UDP協議全稱是用戶數據報協議,在網絡中它與TCP協議一樣用於處理數據包,是一種無連接的協議。在OSI模型中,在第四層——傳輸層,處於IP協議的上一層。UDP有不提供數據包分組、組裝和不能對數據包進行排序的缺點,也就是說,當報文發送之後,是無法得知其是否安全完整到達的。UDP用來支持那些需要在計算機之間傳輸數據的網絡應用。包括網絡視頻會議系統在內的眾多的客戶/服務器模式的網絡應用都需要使用UDP協議。UDP協議從問世至今已經被使用了很多年,雖然其最初的光彩已經被一些類似協議所掩蓋,但是即使是在今天UDP仍然不失為一項非常實用和可行的網絡傳輸層協議。

與所熟知的TCP(傳輸控制協議)協議一樣,UDP協議直接位於IP(網際協議)協議的頂層。根據OSI(開放系統互連)參考模型,UDP和TCP都屬於傳輸層協議。UDP協議的主要作用是將網絡數據流量壓縮成數據包的形式。一個典型的數據包就是一個二進制數據的傳輸單位。每一個數據包的前8個字節用來包含報頭信息,剩餘字節則用來包含具體的傳輸數據。

UDP是OSI參考模型中一種無連接的傳輸層協議,它主要用於不要求分組順序到達的傳輸中,分組傳輸順序的檢查與排序由應用層完成,提供面向事務的簡單不可靠信息傳送服務。UDP 協議基本上是IP協議與上層協議的接口。UDP協議適用端口分別運行在同一臺設備上的多個應用程序。

UDP提供了無連接通信,且不對傳送數據包進行可靠性保證,適合於一次傳輸少量數據,UDP傳輸的可靠性由應用層負責。常用的UDP端口號有:

UDP報文沒有可靠性保證、順序保證和流量控制字段等,可靠性較差。但是正因為UDP協議的控制選項較少,在數據傳輸過程中延遲小、數據傳輸效率高,適合對可靠性要求不高的應用程序,或者可以保障可靠性的應用程序,如DNS、TFTP、SNMP等。

UDP特點和流程

上面的原理很重要,但畢竟我們只是在API之上做應用。只需要瞭解特點和流程。知道特點可以做方案時候考量可行性,流程就是可行後的實施。

UDP特點:

· 無連接的:發數據前不需要建立連接。

· 不可靠:盡最大努力交付,即不保證可靠交付。

· 支持一對一,一對多,多對一和多對多的交互通信

· 佔用資源少,發送數據快。

UDP流程: (本段來源)

UDP編程的客戶端一般步驟是:

1.創建 UDP socket套接字,用socket()函數。

2.用sendto()函數往指定的IP,地址發送信息。

TCP編程的服務器端一般步驟是:

1. 創建 UDP socket套接字,用socket函數。

2. 設置socket的屬性,用setsockopt()函數,(可選)

3. 綁定包含 IP信息,地址信息的(IPv4)結構體。用bind()函數

4. 循環接收消息,用recvfrom()函數

5. 關閉socket套接字

TCP團伙和UDP團伙

WIFI實戰應用第四章 ESP32聯網之UDP

軟件設計

ESP32的UDP詳細過程

WIFI實戰應用第四章 ESP32聯網之UDP

ESP32的UDP Client接口介紹

· 連接函數:connect();

· 關閉socket函數:close();

· 獲取socket錯誤代碼:getsocketopt();

· 接收數據函數:recvfrom();

· 發送數據函數:sendto();

更多更詳細接口請參考官方指南。

ESP32的UDP總結

初始化wifi配置後,程序會根據WIFI的實時狀態,在回調函數中給出狀態返回,所以只需要在回調中進行相關操作,STA開始事件觸發UDP工作,上後就可以進行數據的廣播。

UDP新建任務編寫

UDP接收任務代碼

測試流程和效果展示

測試流程

· 修改AP和STA的賬號密碼

· 修改UDP Port

· 使用手機或者電腦使用助手工具進行UDP廣播測試

效果展示

測試發送數據

WIFI實戰應用第四章 ESP32聯網之UDP

收發小測

WIFI實戰應用第四章 ESP32聯網之UDP

發送100次,看看不可靠的程度

WIFI實戰應用第四章 ESP32聯網之UDP

WIFI實戰應用第四章 ESP32聯網之UDP

UDP總結

· 底層重原理,應用中流程+接口。

· 此源碼沒有異常處理,自己移植需要適當修改,在接收任務中看返回值,決定是否重新新建UDP Client,與TCP類似的操作。

· 源碼地址:
https://github.com/xiaolongba/wireless-tech

開源地址:
https://github.com/HX-IoT/


分享到:


相關文章: