项目实战:p2p文件下载器
項目背景
由于我在宿舍有一臺筆記本一臺臺式電腦,兩個電腦經常需要互傳一些文件,但是每次插拔U盤就顯得很不優雅了,遂打算自己開發一個用于面對面傳輸的軟件。
項目環境
win10操作系統、VS2019、HTTP第三方庫httplib、boost/filesystem
使用技術
網絡傳輸、HTTP/TCP協議、多線程、分塊傳輸、STL
項目結構圖
具體實現介紹
項目使用介紹
項目啟動后,會自動啟動服務端和客戶端程序,用戶通過客戶端可以獲取連接自己局域網的主機列表,選擇指定主機獲取其存儲文件,再通過文件名下載具體文件。
項目文件結構
client.hpp包含發送1、獲取連接請求2、獲取文件列表請求3、獲取指定文件請求的設置
server.hpp包含設置響應上面請求的方法
tool.hpp包含使用boost庫接口,針對于文件創建,訪問,更改等。
httplib.h是建立客戶端和服務端的庫
main.cpp因為是全雙工通信,通過多線程的方式同時啟動客戶端和服務端。
模塊介紹
客戶端
1.局域網通信模塊
基于網卡信息的獲取和IP地址的管理,獲取到當前所在局域網中所有IP地址
2.網絡通信模塊
基于http協議使用httplib搭建客戶端,實現向服務端發送配對/列表獲取/下載請求
3.文件分塊模塊
基于線程池,實現下載文件時,將所有文件下載進行分塊傳輸
服務端
1.網絡通信模塊
基于http協議使用httpliba搭建服務端,實現對客戶端主機匹配/列表獲取/下載請求 的反應
2.文件操作模塊
基于boost庫的文件操作,實現指定目錄下的文件迭代獲取和文件的讀寫
具體接口介紹
客戶端
- 發送文件配對請求
- 獲取在線主機列表請求
- 獲取指定主機文件列表
獲取在線主機列表的樁模塊,主機配對成功后,客戶端會直接向服務端請求文件列表
- 下載文件請求
對于小于100M的文件,內存放的下,所以直接傳輸即可
- 分塊下載
服務端
這三個接口都是根據客戶端請求對應設計的,作用是填充一個response對象,然后將response對象的內容填充到http響應中,返回給客戶端
- 主機配對,確保對端主機在線
- 分享文件列表,發送文件列表
- 發送需要下載的文件
其他
cpp-httplib的大致實現內容:
- server類中有一個路由表,通過meht&path:調用對應的回調函數
- 每次接受一個客戶端請求,使用線程池,開啟一個線程進行處理,解析請求,得到request對象,查找路由表調用回調函數
- 回調函數的作用,將信息填充到response對象,再組織一個http響應獲取response對象信息回復給客戶端
項目源碼
gitee項目源碼-面對面傳輸
總結
以上是生活随笔為你收集整理的项目实战:p2p文件下载器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 系统应用-通信应用-MC
- 下一篇: 《精力管理》之一