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

C++Builder 使用 NMStrmServ/NMStrm 元件實現檔案傳輸

     編輯:關於C++

C++Builder 內建網路元件 NMStrmServ (伺服端) 與 NMStrm (客戶端) 提供簡單高效的檔案傳輸功能,比 FTP 元件更輕量易用。本文完整示範雙邊實作程式碼。

架構概覽

  • 接收端:NMStrmServ + SaveDialog
  • 發送端:NMStrm + OpenDialog + 目標 IP 輸入
  • 傳輸層:TCP/IP,元件內部封裝連線管理

一、接收端程式實作

元件配置

  • 放置 NMStrmServ1、SaveDialog1
  • 設定 NMStrmServ1.Port (預設 1234 等)

OnMsg 事件處理

void __fastcall TForm1::NMStrmServ1Msg(TObject* Sender, TStream* Strm) {
    if (SaveDialog1->Execute()) {
        // 若檔案存在先刪除
        if (FileExists(SaveDialog1->FileName))
            DeleteFile(SaveDialog1->FileName);

        TFileStream* fs = new TFileStream(SaveDialog1->FileName, fmCreate);
        try {
            fs->CopyFrom(Strm, Strm->Size); // 直接從網路流複製
            ShowMessage(L"接收成功!儲存為:" + SaveDialog1->FileName);
        } catch (...) {
            ShowMessage(L"接收失敗!");
        }
        fs->Free();
    }
}

二、發送端程式實作

元件配置

  • NMStrm1、OpenDialog1、Button1 (Caption="發送檔案")
  • Label1 (Caption="接收主機:")、Edit1 (Text="127.0.0.1")

Button1 OnClick 事件

void __fastcall TForm1::Button1Click(TObject* Sender) {
    if (OpenDialog1->Execute()) {
        TFileStream* fs = new TFileStream(OpenDialog1->FileName, fmOpenRead);
        try {
            NMStrm1->Host = Edit1->Text;        // 目標 IP/主機名
            NMStrm1->FromName = L"NetMasters";  // 發送者識別
            NMStrm1->PostIt(fs);                // 非同步發送
            ShowMessage(L"檔案 " + OpenDialog1->FileName + L" 發送成功!");
        } catch (...) {
            ShowMessage(L"檔案 " + OpenDialog1->FileName + L" 發送失敗!");
        }
        fs->Free();
    }
}

三、部署與測試

  1. 分別編譯兩個專案為獨立 EXE
  2. 接收端先啟動,等待連線
  3. 發送端輸入目標 IP (區網測試用實際 IP,本機測試用 127.0.0.1)
  4. 點擊「發送檔案」選取檔案,接收端彈出儲存對話框
  5. 確認檔案大小、內容一致

四、進階應用與擴充

需求實作方向
傳輸進度顯示繼承 TStream 建立進度回報流,覆寫 Read/Write
多檔案/資料夾傳輸客戶端打包為 ZIP/資料流序列化,伺服端解包
斷點續傳協議層加入檔案位移、分塊驗證邏輯
加密傳輸使用 TIdSSLIOHandlerSocketOpenSSL 或自訂加密流
防火牆穿透UPnP 端口映射或中繼伺服器轉發

五、常見問題排查

  • 連線失敗:檢查防火牆、Port 衝突、IP 正確性
  • 檔案損壞:確認 fmCreate/fmOpenRead 模式正確,避免文字/二進制模式混淆
  • 大檔案記憶體:CopyFrom 內部分塊處理,不會一次載入全檔
  • 中文檔名亂碼:確保雙邊編碼一致 (建議 Unicode 路徑 API)

結語

NMStrmServ/NMStrm 為 C++Builder 快速建立檔案傳輸功能的利器,適合內網工具、資料同步、日誌收集等輕量級場景。搭配 TFileStream 幾行程式碼即可完成核心邏輯,開發效率極高。

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