UDP可靠傳輸簡易設計

UDP,鑑於其丟包和亂序(後發先至)問題,爲保證其可靠性設計以下報頭協議,供你們參考git

數據包設計

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

數據包示意圖
數組

包頭類型說明

1.類型(1字節)服務器

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

2.傳輸狀態(1字節)設計

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

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

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

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

傳輸思路

1.在大文件發送時進行通知準備和準備肯定get

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

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

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

3.大文件發送完畢

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

4.文件傳輸示意圖

OC代碼

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

相關文章
相關標籤/搜索