首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

CS 架構軟體自動升級實作(三):伺服端/客戶端核心協定處理

     編輯:Java 相關知識

本文為系列核心,展示伺服端服務執行緒 AUpdSrvProc 與客戶端升級處理 AutoUpdateClient 的完整通訊邏輯。

伺服端:AUpdSrvProc

每個客戶端連線一條執行緒,主迴路讀取 Flag(1 byte) 分派處理:

  • 命令段 (CMD_DATA_SECT):解析 8 字節命令
    • READY_TO_UPDATE → 呼叫 sendUpdateFile() 發送差異檔案
    • BYE → 回應 BYE 並斷開
  • 資料段 (MARK_DATA_SECT/END):依前一命令處理
    • SEND_CLIENT_VERSION → 呼叫 receiveClientVer() 接收客戶端版本 XML

關鍵方法:sendUpdateFile()

  1. 比對伺服端/客戶端版本號,相同則回 NOTNEED_UPDATED
  2. 遍歷伺服端檔案列表,若客戶端無此檔或版本不同 → sendFile()
  3. 傳輸檔案流程:
    • 發送 SEND_FILE_ABSOULT + 絕對路徑
    • 發送 START_TRANSMIT
    • 分塊發送檔案內容(MARK_DATA_SECT + 長度 + 資料)
    • 發送 MARK_DATA_END
    • 等待客戶端 TERMINATE_TRANSMIT 確認
  4. 最後發送版本檔 autoupdate.xml 與說明檔 history.htm

客戶端:AutoUpdateClient

主流程:

  1. 連線伺服器,發送 SEND_CLIENT_VERSION + 本地版本 XML
  2. 收到 RECEIVED_CLIENT_VERSION → 回 READY_TO_UPDATE
  3. 迴路處理伺服端命令/資料:
    • SEND_FILE_ABSOULT → 接收路徑 → 回 RECEIVED_FILE_ABSOULT
    • START_TRANSMIT → 接收檔案內容寫入磁碟 → 回 TERMINATE_TRANSMIT
    • UPDATED_SUCCESSFUL/FAILURE/NOTNEED_UPDATED → 結束

協定細節亮點

  • 長度前綴:4 字節 ASCII 數字(不足左補 0),避免黏包/拆包。
  • 雙向確認:每個關鍵步驟皆有請求-回應,保證可靠性。
  • 斷點續傳基礎:檔案按區塊傳輸,易擴充斷點續傳(記錄已傳位移)。
  • 資源釋放:finally 關閉 Socket/Stream,防洩漏。

ClientVerParser

同樣用 DOM4J 解析客戶端上傳的版本 XML,轉為 UpdFile[] 供伺服端比對。

下一篇(四)將展示配置類與工具方法,完成整個系列。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved