UDP可靠傳輸簡易設計


UDP,鑒於其丟包和亂序(后發先至)問題,為保證其可靠性設計如下報頭協議,供大家參考

數據包設計

數據包總大小按照MTU設計設置,小於1500字節

數據包示意圖

包頭類型說明

1.類型(1字節)

數值 說明
0 文字類型
1 圖片類型
2 文件類型

2.傳輸狀態(1字節)

目前數值4未使用,可考慮后期使用

數值 說明
0 客戶端發送給服務器提示要傳大文件
1 服務器發送給客戶端已准備好接受
2 客戶端發送文件中
3 客戶端發送完成,詢問服務端接收情況
4 服務端發送客戶端接收完成
5 要求客戶端重發丟包數據
6 用於文件數據適用於單個包發送

3.包序列號(2字節):序列號為發送包在分割包中的位置

4.大文件傳輸的分割包總數(2字節):用於確定包是否接收完整有無丟包

傳輸思路

1.在大文件發送時進行通知准備和准備確定

  • client端發起大文件發送請求(包頭:文件類型:6,傳輸狀態為0,包序列號0,總包數:分割包總數)
  • server端收到請求,完整准備后,回復請求發送分割包(包頭:文件類型:6,傳輸狀態為1,包序列號0,總包數:1)

2.大文件(各分割包)傳輸

  • client端發送各個分割數據包(包頭:文件類型,傳輸狀態為2,包序列號:分割包位置,總包數:分割包總數)
  • server端通過包頭部分識別包的類型,序列號等保存接收到的各個數據包體

3.大文件發送完畢

  • client端發起傳輸完畢請求(包頭:文件類型:6,傳輸狀態為3,包序列號0,總包數:1)
  • server通過檢查接收的包個數,回復client端接收情況
  • 數據包完整,按照序列號拼接數據,進行展示
  • 數據包有丟失,向client端發起重發請求(包頭:文件類型:6,傳輸狀態為5,包序列號0,總包數:1),包體中以數組方式存放未接收到的數據包序列號,回到步驟2

4.文件傳輸示意圖

OC代碼

這里不po出具體代碼,有興趣的同學可自行前往下載demo,demo中有使用opencv,如不需要自行刪除即可,如文中有錯誤之處望指出!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM