1. 用戶需求
你是否有過這樣的情況——和舍友等分享文件時,可能雙方傳的文件過多/過少,並非自己全部要使用的,最主要的是分享者要去選擇相關文件傳輸,太過於麻煩。於是產生了皮卡丘下載器項目,該項目根據網絡傳輸、HTTP協議、TCP協議、分塊傳輸機制、boost庫、文件相關操作等技術完成,可以實現任意兩臺主機間共享文件的下載。
2. 項目介紹
皮卡丘下載器是一個文件共享下載器:
- 搜索局域網中運行該工具的主機,獲取在線主機列表,查看共享主機,進行主機配對;
- 查看指定主機的共享文件列表;
- 在共享文件下下載指定的文件。
3. 設計流程
3.1 框架圖
3.2 流程圖
3.3 客戶端
- 對服務器進行請求,在指定的共享主機下,進行指定文件目錄下的文件共享下載:
- 獲取局域網中所有的IP地址信息;
- 向獲取到的IP主機地址發送主機配對請求(獲取在線主機列表);
- 顯示在線的主機列表(用戶選擇具體主機);
- 用戶選擇指定的主機發送文件列表獲取請求(獲取到主機上的共享文件列表);
- 顯示所有的文件列表,用戶選擇共享文件;
- 向指定的主機發送文件數據獲取請求(下載文件);
【接口】
//獲取在線主機
bool GetOnlineHost()
//獲取文件列表
bool GetShareList(const std::string &host_ip)
//文件下載
//直接下載文件 - 文件較小
bool DownloadFile(const std::string &host_ip, const std::string& filename)
//分塊下載文件 - 文件較大
bool RangeDownload(const std::string &host_ip, const std::string &name)
3.4 服務端
- 實現一個http服務端程序,爲客服端進行各種響應:
- 搭建一個http服務器;
- 提供主機配對功能;
- 提供文件列表功能;
- 提供下載功能文件功能。
【接口】
//主機配對
static void HostPair(const httplib::Request &req, httplib::Response &rsp)
//獲取共享文件列表
static void ShareList(const httplib::Request &req, httplib::Response &rsp)
//下載文件
static void Download(const httplib::Request &req, httplib::Response &rsp)