【项目】P2P文件快传
一、概要
1、需求定檔
功能:讓網(wǎng)絡(luò)上任意兩臺主機之間可以互相下載共享文件
2、概要設(shè)計
(1)網(wǎng)絡(luò)上任意兩臺主機共享
首先要直到在網(wǎng)絡(luò)上有哪些主機能夠建立共享關(guān)系
(2)從一個指定的主機上去下載自己想要的文件,也可以將自己的文件提供給別人下載
3、模塊功能框架
4、功能流程圖
二、詳細(xì)講述P2P下載器
1、包含模塊
- 客戶端
①查看網(wǎng)絡(luò)上有哪些共享主機
向網(wǎng)絡(luò)中廣播配對請求,得到響應(yīng)
②獲取指定主機文件列表
向指定主機發(fā)送獲取列表請求
③從指定主機上下載文件
向指定主機發(fā)送下載指定文件的請求 - 服務(wù)端
針對客戶端的功能做出正確響應(yīng)提供服務(wù)即可
2、客戶端功能流程
(1)獲取網(wǎng)卡信息——》獲取主機IP+MASK——》得到局域網(wǎng)IP列表
(2)向所有IP發(fā)送配對請求——》得到在線主機列表
(3)選擇一個主機IP發(fā)送獲取文件列表請求——》得到獲取到的共享的文件列表
(4)從這個主機IP 下載指定的共享主機
3、服務(wù)端功能流程
(1)接收到主機配對請求,則做出一個200響應(yīng)(說明主機在線)
(2)接收到文件列表請求
- 檢測獲取指定的共享目錄下的文件信息
- 將所有文件名組織成http相應(yīng)正文
(3)接收到指定的文件下載請求 - 通過文件名檢測文件是否存在
- 檢測文件受否是一個普通文件
- 如果存在并且正確,則打開文件,獲取文件數(shù)據(jù),作為http響應(yīng)正文響應(yīng)給客戶端
三、項目中用到的重要技術(shù)
1、分塊傳輸
(1)斷點續(xù)傳
網(wǎng)頁上的斷點續(xù)傳其實就是通過分塊下載完成的。
斷點續(xù)傳:當(dāng)正在下載文件的時候,突然網(wǎng)絡(luò)中斷,導(dǎo)致文件沒有下載完畢而失敗,等到下次網(wǎng)絡(luò)通暢的時候,可以繼續(xù)從上次斷開的位置開始重新下載文件。而不需要重新將完整的文件下載一次,來提高異常情況下文件的傳輸效率。
(2)斷點續(xù)傳是如何實現(xiàn)的?
文件下載過程中單獨開啟一個文件,每隔一會兒就記錄一下當(dāng)前已經(jīng)下載了多少數(shù)據(jù),這時如果網(wǎng)絡(luò)斷開,下次下載就知道從哪里下載了。下次繼續(xù)下載的時候就需要告訴服務(wù)端到底應(yīng)該從哪里開始傳輸,這樣服務(wù)端知道從哪里開始傳輸數(shù)據(jù),就不需要對已經(jīng)傳輸過的數(shù)據(jù)重新二次傳輸。
(3)但是在此項目中暫不實現(xiàn)斷點續(xù)傳,會用到分塊傳輸。
因為當(dāng)前我們的文件傳輸都是一次性讀取/寫入文件數(shù)據(jù),相當(dāng)于定義了一個與文件大小相同的buffer,這時如果文件大小非常大,則會造成嚴(yán)重問題:
(1)內(nèi)存有點不夠用,則會大量使用交換分區(qū)交換內(nèi)存,而這種大量內(nèi)存交換會造成效率低下。
(2)內(nèi)存耗盡,程序崩潰。
為了解決以上問題,最好使用分塊傳輸。(每次只向服務(wù)器請求文件的一部分)
2、網(wǎng)絡(luò)穿透原理
(1)當(dāng)前所寫的P2P下載器項目是一個局域網(wǎng)的P2P,無法實現(xiàn)整個網(wǎng)絡(luò)的p2p。因為局域網(wǎng)之間無法跨網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)傳輸。
就算已知對方的私網(wǎng)地址,但是因為我們并沒有網(wǎng)絡(luò)直連,因此無法直接通信。所以局域網(wǎng)之間想要進(jìn)行通信就要借助網(wǎng)絡(luò)穿透技術(shù)實現(xiàn)。
(2)網(wǎng)絡(luò)穿透技術(shù)實現(xiàn)是讓兩個局域網(wǎng)主機之間不需要經(jīng)過一個中轉(zhuǎn)服務(wù)器進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)而實現(xiàn)通信。即,借助一個公網(wǎng)服務(wù)器(但是這個公網(wǎng)服務(wù)器并不實現(xiàn)數(shù)據(jù)的轉(zhuǎn)發(fā))
代碼實現(xiàn)P2P文件快傳
總結(jié)
以上是生活随笔為你收集整理的【项目】P2P文件快传的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt实战案例(54)——利用QPixma
- 下一篇: 关于学习TF