文件傳輸協議---一種自定義的文件傳輸協議


前言

  由於TFTP協議過於簡單,且沒有重傳機制;FTP協議很好,但是不能完美的嵌入到已有的代碼中,從零開發有一定難度,因此定義了一種基於UDP協議,簡單,有確認和重傳機制的文件傳輸協議。

  該種協議只有一對Socket套接字,沒有控制命令,直接就是文件數據的傳輸,所以很容易以函數級別嵌入到已有代碼中,且對性能的影響非常小,由於協議是在UDP協議的基礎上定義的,因此需要有確認機制。通信的兩端沒有服務端和客戶端之分,兩端都可以發起。唯一的條件是:兩端的UDP通信的Socket已經建立成功,且通信正常。

 

協議格式

發起端:

總包數(4)、本包序號(4),本包長度(4),本包校驗碼(2)、本包數據(N)

說明:

文件總包數:文件包總數。
本包序號:包序號,從1開始計。
本包長度:后續“本包數據”字段的長度,如果通訊層包最大32K,該值建議不超過16K。
本包數據校驗碼:根據CRC計算校驗碼(只計算”本包數據”字段的內容)。
本包數據:具體需要傳輸的數據。

 

接收端:

本包序號(4)、當前狀態(2)、重傳包序號(4)、保留(2)

說明:

本包序號:當前包的報序號

當前狀態:不同的情況對應不同的狀態,且數據接收失敗,一律丟棄。

  • 0x0000:本包數據接收成功,可以接收下一包數據;
  • 0x0001:全部數據接收成功;
  • 0x0002:本包數據接收失敗,長度不符或校驗碼錯,可以重新接收本包數據;
  • 0x0003:本包數據接收失敗,序號錯,需要重新接收“重傳包序號(4)”的包;
  • 0x0004:本包數據接收失敗,單板出現數據存儲出錯,無法繼續接收;
  • 0x0005:內存申請失敗,無法繼續接受;
  • 0xFFFF:未知錯誤,無法繼續接收;
  • 其他錯誤碼保留,待以后擴展使用

重傳包序號:如果需要重傳,該字段填寫需要重傳的包序號

保留:擴展協議使用

 

擴展

  該協議有確認和重傳機制,但是沒有超時機制,可以添加確認超時機制,保證數據的傳輸更加穩定!


免責聲明!

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



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