FMail 是一套基於局域網的檔案傳輸工具,採用 Client / Server / Database Server 三層架構,支援單發/群發、使用者搜尋、群組管理、傳輸歷史查詢、遠端維護、系統日誌、拖放檔案等功能。本文介紹整體架構、核心庫設計、通訊模式與客戶端資料存取機制。
檔案傳輸採 P2P 直連:Server 僅負責訊號交換 (IP/Port),實際資料流在兩 Agent 間直接傳輸,減輕伺服器頻寬壓力。
WSAAsyncSelect / IOCP)。_ConnectionPtr、_RecordsetPtr、_FieldPtr 智慧指標。_variant_t、時間型別轉換工具類別。為減少客戶端部署複雜度 (免安裝 MySQL ODBC 驅動),Agent 不直連資料庫,改為 SQL 指令轉發:
優點:客戶端極輕量、資料庫連線集中管理、安全性較高 (不暴露 DB 埠)。
缺點:Server 需處理高併發 SQL 請求、延遲稍高、需自行實作查詢取消/超時機制。
| 圖示順序 | 功能 |
|---|---|
| 1 | 重新整理使用者清單 |
| 2 | 搜尋使用者 |
| 3 | 重新命名目前使用者 |
| 4 | 檢視使用者主機位址 |
| 5 | 新增傳送檔案 |
| 6 | 移除傳送清單檔案 |
| 7 | 發送檔案 |
| 8 | 取消發送 |
| 9 | 系統設定 |
| 10 | 隱藏系統 / 線上說明 |
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 等。