P2P共享下载器
文章目錄
- 1、引言
- 2、項目簡介
- 3、整體框架介紹
- 4、客戶端設計
- 5、服務端設計
- 6、接口設計
- 7、項目技術點即改進點
- 8、源碼
1、引言
不知道大家在大學期間有沒有有沒有為各種各樣的作業所煩惱過(進行給學委,班長拷貝文件、互傳資料等工作)?并不是所做作業的時候(當然也有)而是在叫作業的時候,每門科目不同的作業交給不同的學習委員,發送到不同的郵箱這也是相當麻煩,到這里有沒有一種方法:各科都有一個專門地點,大家向同一個地方提交相同作業,然后由學委統一收取;這樣統一的操作是高效的而且是好管理;在了解到了網絡傳輸、HTTP協議、CPP-httplib,分塊傳輸等技術后,我嘗試開發一個這樣的項目,接下來分享一下這個項目。
2、項目簡介
- 這個項目實現在一個局域網下進行附近文件共享下載功能的工具;
- [1]能夠進行搜索匹配局域網中運行該工具的主機;并且獲取到局域網在線主機列表
- [2]能夠獲取指定主機所共享文件信息列表(指定的共享目錄下的文件信息)
- [3]能夠對指定主機上的指定文件進行多線程分塊下載提高效率
3、整體框架介紹
項目主要分為兩大模塊:客戶端模塊/服務端模塊
客戶端模塊:
服務端模塊:
- 針對客戶端所發起多種的請求,提供相應的服務
框架圖:
4、客戶端設計
- 獲取網卡信息–獲取主機IP + MASK–局域網IP列表
- 向所有IP發送配對請求 — 得到在線主機列表(將在線主機的IP打印到終端)
- 選擇一個主機(IP)發送獲取該主機的文件列表請求–獲取到共享的文件列表(將文件列表打印到終端)
- 從這個主機下載指定的共享文件(創建文件,打開文件,將響應數據寫入文件。關閉文件)
5、服務端設計
-
接收到主機請求配對,做出200響應
-
接收到文件列表請求
1.檢測獲取指定共享目錄下文件信息(文件名)
2.將所有文件名組織成HTTP響應正文 -
接受到指定文件下載請求
1.通過文件名檢測文件是否存在
2.檢測文件是否是一個普通文件
3.打開文件,讀取文件數據作為HTTP響應正文響應發送
6、接口設計
客戶端:
提供客戶端主機配對功能
提供獲取指定主機共享文件列表功能
bool GetShareList(const uint32_t ip);//獲取指定主機的共享文件列表,打印在終端提供下載指定主機上共享文件的文件功能
bool DownLoadFile(const uint32_t ip,const std::string &filename);服務端:
提供響應主機配對請求功能
提供響應獲取共享文件列表功能
void ShareList();//針對客戶端共享文件列表做出響應---(獲取目錄下文件信息)提供響應下載請求功能
v**加粗樣式**oid DownLoad();//針對客戶端下載請求做出響應---(打開文件讀數據響應給客戶端)其他接口:
windows下獲取網卡信息功能
cpp-httplib搭建http服務器
httplib::Client cli(buf, P2P_PORT); //實例化httplib客戶端對象 httplib::Server _srv;//實例化httplib服務端7、項目技術點即改進點
技術點: 使用cpp-httplib搭建http服務器、boost庫對文件的操作、多線程、分塊傳輸等;
改進點:
斷點續傳: 針對下載過程中異常大致下載終止,下次繼續是從上次斷開處開始下載,而不是從心開始
網絡穿透: 實現在不同局域網中,兩臺主機之間進行文件共享下載
8、源碼
Github:https://github.com/IronChang/P2P-Shared-download
總結
- 上一篇: 4个漂亮的wordpress企业主题
- 下一篇: php获取腾讯视频信息,云水日记-PHP