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

C++Builder 檔案任意分割傳輸技術:斷點續傳的 Socket 實作

     編輯:關於C++

針對大檔案網路傳輸易中斷、重傳成本高的問題,本文實作一套「客戶端分割 → 逐塊發送 → 伺服端組裝」的斷點續傳機制,並在網路中斷時自動暫停、恢復後續傳。

架構與流程

  • 雙向 Socket: 同一程式同時扮演 Client(發送)與 Server(接收),雙機互連即可測試。
  • 分割單位: 固定 20,000 位元組/塊(可調),最後一塊為餘數。
  • 狀態保持: 使用 static 區域變數與全域變數記錄:檔案總大小、塊數、已發送/接收位移、最後一塊大小。
  • 斷點邏輯: 發送端每塊發送前檢查 Client->Active,若連線中斷則重試連線;接收端以 TMemoryStream 累積資料,最後 SaveToFile 並載入 TImage 驗證(範例為 BMP)。

核心代碼片段

// 發送端 OnWrite 事件
void __fastcall TForm1::ClientWrite(TObject *Sender, TCustomWinSocket *Socket) {
    static long sent = 0, total, block = 20000, lastBlock;
    static TMemoryStream *ms = new TMemoryStream();
    if (firstCall) { ms->LoadFromFile(filename); total = ms->Size; lastBlock = total % block; firstCall = false; }

    if (sent < total - lastBlock) {
        ms->Position = sent;
        char buf[20000]; ms->ReadBuffer(buf, block);
        Socket->SendBuf(buf, block);
        sent += block;
        // 每塊發送後主動斷開/重連模擬網路不穩(範例簡化)
        Client->Active = false; Client->Active = true;
    } else { // 最後一塊
        ms->Position = sent;
        char buf[20000]; ms->ReadBuffer(buf, lastBlock);
        Socket->SendBuf(buf, lastBlock);
        sent = total; // 完成
    }
}

// 接收端 OnClientRead 事件
void __fastcall TForm1::ServerClientRead(TObject *Sender, TCustomWinSocket *Socket) {
    static TMemoryStream *ms = new TMemoryStream();
    static long received = 0, total, block = 20000, lastBlock;
    char buf[20000];
    int len = Socket->ReceiveBuf(buf, block);
    ms->WriteBuffer(buf, len);
    received += len;
    if (received >= total) {
        ms->SaveToFile("d:\\k.bmp");
        ms->Position = 0;
        Image1->Picture->Bitmap->LoadFromStream(ms);
    }
}

關鍵技術點

  1. TMemoryStream 作為記憶體緩衝區,支援隨機存取(Position)與串流轉存。
  2. Socket 發送/接收緩衝區為 void*,需手動管理讀寫位移。
  3. 全域/靜態變數跨事件保持傳輸狀態,實現斷點記憶。
  4. 範例簡化了協定封裝(無封包頭、無校驗、無確認機制),實際應用需加入:檔案資訊封包、MD5 校驗、ACK/NAK 確認、加密傳輸等。

此架構可延伸為 FTP 斷點續傳、大檔案分片上傳、分散式檔案同步等核心模組。

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