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