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

FMail 文件信使 V1.0:局域網 C/S 架構檔案傳輸系統設計與實作

     編輯:關於VC++

FMail 是一套基於局域網的檔案傳輸工具,採用 Client / Server / Database Server 三層架構,支援單發/群發、使用者搜尋、群組管理、傳輸歷史查詢、遠端維護、系統日誌、拖放檔案等功能。本文介紹整體架構、核心庫設計、通訊模式與客戶端資料存取機制。

系統架構概覽

  • Agent (Client):使用者端介面,負責檔案選擇、使用者管理、傳輸監控。
  • File Transfer Server:接收 Agent 傳送請求,協調 Peer-to-Peer 直接傳輸連線。
  • Database Server (MySQL):儲存使用者帳號、群組、傳輸記錄、系統日誌。

檔案傳輸採 P2P 直連:Server 僅負責訊號交換 (IP/Port),實際資料流在兩 Agent 間直接傳輸,減輕伺服器頻寬壓力。

開發環境

  • OS:Windows 2000 SP3 / XP
  • IDE:Visual C++ 6.0
  • DB:MySQL 3.23.52 + Paradox 7.0
  • 存取:ADO + Winsock 2.0

核心輔助庫

1. NetLib 網路通訊庫 (DLL)

  • 封裝原始 Socket 操作,提供阻塞/非阻塞 Client/Server 類別。
  • 支援同步 + 非同步混合模式 (WSAAsyncSelect / IOCP)。
  • 完整封裝 檔案傳送/接收類別 (斷點續傳、進度回呼)。
  • 內建執行緒池、Mutex、Lock-free 佇列等並發元件。

2. ADODB 資料庫存取庫

  • 封裝 _ConnectionPtr、_RecordsetPtr、_FieldPtr 智慧指標。
  • 提供 _variant_t、時間型別轉換工具類別。
  • 簡化 SQL 執行、參數綁定、資料讀寫流程。

客戶端資料存取機制:Agent → Server → DB

為減少客戶端部署複雜度 (免安裝 MySQL ODBC 驅動),Agent 不直連資料庫,改為 SQL 指令轉發:

  1. Agent 組裝 SQL 字串 → 封裝為網路封包 → 發送至 Server。
  2. Server 接收 → 透過 ADO/ODBC 直連 MySQL 執行。
  3. Server 將結果集序列化 → 回傳 Agent。
  4. Agent 反序列化 → 繫結至 UI 控制項。
優點:客戶端極輕量、資料庫連線集中管理、安全性較高 (不暴露 DB 埠)。
缺點:Server 需處理高併發 SQL 請求、延遲稍高、需自行實作查詢取消/超時機制。

Agent 功能工具列對照

圖示順序功能
1重新整理使用者清單
2搜尋使用者
3重新命名目前使用者
4檢視使用者主機位址
5新增傳送檔案
6移除傳送清單檔案
7發送檔案
8取消發送
9系統設定
10隱藏系統 / 線上說明

系統截圖說明

  • 圖一:主介面 - 使用者樹狀清單、檔案傳送隊列、工具列。
  • 圖二:群發群組管理對話框 - 新增/編輯/刪除群組、成員拖曳。
  • 圖三:傳輸歷史查詢 - 依日期/使用者/檔案類型篩選、匯出報表。
  • 圖四:系統設定 - 網路埠、資料庫連線字串、日誌等級、P2P 連線模式。

原始碼結構


FMail/
├── NetLib/          // 網路庫 (DLL 專案)
│   ├── SocketEx.h/cpp
│   ├── ThreadPool.h/cpp
│   └── FileTransfer.h/cpp
├── ADODBLib/        // 資料庫庫 (DLL 專案)
│   ├── AdoConnection.h/cpp
│   └── AdoRecordset.h/cpp
├── Agent/           // 客戶端 (MFC Dialog 專案)
│   ├── MainDlg.h/cpp
│   ├── UserListCtrl.h/cpp
│   └── TransferManager.h/cpp
├── Server/          // 檔案傳輸伺服器 (Console/Service)
│   ├── ServerMain.cpp
│   └── SessionManager.h/cpp
└── DB/              // SQL Scripts (MySQL)
    ├── schema.sql
    └── init_data.sql

總結與展望

FMail 展示了經典三層架構在局域網檔案傳輸場景的落地實踐。NetLib 與 ADODBLib 兩大基礎庫可獨立重用於其他網路/資料庫專案。後續可擴充:SSL/TLS 加密傳輸、檔案壓縮/加密、Web 管理介面、跨平台 (Linux/macOS) Agent 等。

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