今天,來分享下TCP-UART透傳示例,源碼開放,可根據實際需求靈活應用。
一、TCP協議概述
TCP(Transmission Control Protocol,傳輸控制協議)——是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。它主要用于在不可靠的網絡環境中提供穩定的數據傳輸服務,確保數據能夠按照順序、無錯誤地到達接收端。
TCP通過三次握手建立連接,使用滑動窗口進行流量控制,以及通過校驗和確認應答、超時重傳等機制來保證數據的可靠性。它是互聯網協議套件(TCP/IP協議族)的核心組成部分,廣泛應用于各種網絡應用中。
▼ TCP工作原理 ▼
連接建立:
TCP協議使用三次握手協議來建立連接。
客戶端發送一個SYN(同步序列編號)報文給服務端,并攜帶一個隨機生成的初始序列號。
服務端收到SYN報文后,發送一個SYN+ACK(同步序列編號 + 確認應答)報文給客戶端,表示確認收到了客戶端的SYN報文,并攜帶自己的初始序列號。
客戶端收到服務端的SYN+ACK 報文后,發送一個ACK(確認應答)報文給服務端,表示確認收到了服務端的SYN+ACK報文。至此,TCP連接建立完成。
數據傳輸:
在連接建立后,雙方就可以開始傳輸數據了。TCP協議會將應用層發送的數據分割成適當長度的報文段(通常受該計算機連接的網絡的數據鏈路層的最大傳輸單元MTU的限制),并為每個報文段分配一個序號。
接收端在收到報文段后,會按照序號進行排序,并發送確認應答(ACK)給發送端。如果發送端在合理的往返時延(RTT)內未收到確認應答,則會重傳對應的報文段。
連接釋放:
TCP協議使用四次揮手協議來終止連接。
客戶端發送一個FIN(結束)報文給服務端,表示自己想要關閉連接。
服務端收到FIN報文后,發送一個ACK報文給客戶端,表示確認收到了客戶端的FIN報文。此時,客戶端到服務端的連接關閉,但服務端到客戶端的連接仍然打開。
服務端在發送完所有剩余數據后,也發送一個FIN報文給客戶端,表示自己也想要關閉連接。
客戶端收到服務端的FIN報文后,發送一個ACK報文給服務端,表示確認收到了服務端的FIN報文。至此,TCP連接完全關閉。
二、TCP-UART透傳示例
本小節教你使用LuatOS腳本語言,讓Air201模組連接上一個TCP服務器,并且實現模組和服務器之間數據的雙向傳輸。
https://docs.openluat.com/air201/luatos/app/socket/tcp/
2.1 本教程實現的功能定義:
通過網頁端啟動一個TCP服務器;
Air201模組插卡開機后,連接上TCP服務器;
Air201模組向TCP服務器發送:TCP CONNECT,服務器可以收到數據并且在網頁端顯示;
TCP服務器網頁端向Air201模組發送:data from TCP server,Air201模組可以收到數據并且通過串口輸出顯示。
2.2 核心腳本代碼詳解
2.2.1 串口初始化
本文示例:串口使用MAIN_UART(uart1)。
2.2.2 數據接收回調:搭建響應橋梁
這里使用uart.rx接口,和以zbuff的方式存儲從uart1外部串口收到的數據--收取數據會觸發回調。
注意:這里的"receive"是固定值不要修改。
2.2.3 TCP網絡配置:鋪就數據通道
2.2.4 TCP至串口透傳:數據無縫流轉
2.2.5 串口至TCP反透傳:信息雙向傳遞
2.3 完整代碼及運行結果
2.3.1 完整代碼
2.3.2 運行結果
使用TCP/UDP web測試工具及SSCOM串口工具,運行結果如下圖所示:
今天的內容就分享到這里了~
審核編輯 黃宇
-
TCP
+關注
關注
8文章
1357瀏覽量
79107 -
uart
+關注
關注
22文章
1237瀏覽量
101445 -
源碼開放
+關注
關注
0文章
2瀏覽量
5170
發布評論請先 登錄
相關推薦
評論