freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

bt下載工具的設(shè)計(jì)和實(shí)現(xiàn)計(jì)算機(jī)-資料下載頁

2024-12-06 13:03本頁面

【導(dǎo)讀】BitTorrent協(xié)議是一個(gè)網(wǎng)絡(luò)文件傳輸協(xié)議,它能夠?qū)崿F(xiàn)點(diǎn)對(duì)點(diǎn)文件分享的技術(shù)。節(jié)點(diǎn)下載的種子文件,下載該檔案的速度越快。本文的主要工作內(nèi)容:深入研究了。及BT的關(guān)鍵學(xué)法和策略,對(duì)軟件的系統(tǒng)設(shè)計(jì)進(jìn)行論述。

  

【正文】 下載,它不能再通過下載速率來決定哪些 peer 提供上載了。目前采用的解決辦法是:優(yōu)先選擇那些從它這里得到更好下載速率的 peer,保持與它們的疏通,這樣做的理由是盡可能的利用上載帶寬,一旦某一個(gè) peer 完成下載,那么它也就成為了種子。 超級(jí)種子算法 超級(jí)種子概念不是老版本 BT 協(xié)議的一部分。 中的超級(jí)種子的概念是為幫助那些自身帶寬有限(對(duì)支持大的 Torrent 來說)的發(fā)起者而設(shè)計(jì)的一種新的做種算法,它能使發(fā)起者減少需要上傳的數(shù)據(jù)量以便 spawn new seeds in the torrent。 當(dāng)一個(gè)做種的 Client 進(jìn)入了超級(jí)種子模式,它的行為將不同于普通的做種者,而是扮成一個(gè)不擁有任何數(shù)據(jù)的普通 Client。當(dāng)其他的 Client 和它建立連接之后,它將通知這些 Clients 自己收到了一個(gè)從未被發(fā)送過的 Piece(所有 Piece 都被發(fā)送過的情況是很找畢業(yè)設(shè)計(jì)、項(xiàng)目源碼、編程視頻,就上碼農(nóng)網(wǎng) manong365 20 罕見的),這就使得 Clients 只試圖下載這一個(gè) Piece(而沒有其他想法)。當(dāng) Clients 下載完這個(gè) Piece 后,超級(jí)種子不再通知他們下載其他的 Pieces 直到它看到剛剛傳送的那一個(gè) Piece 已經(jīng)被至少一個(gè)其他的 Client 提供下載。因此在那之前, Clients 都不會(huì)訪問超級(jí)種子的其他 Pieces,這樣就節(jié)省了超級(jí)種子的帶寬。這種方法將提高做種的效率,既讓 Peers 去下載最稀有的數(shù)據(jù)(降低了傳送的多余數(shù)據(jù)量),又限制了傳送給 Peers 的對(duì) Swarm 沒有任何貢獻(xiàn)的數(shù)據(jù)量。這種算法未出現(xiàn)之前,一個(gè)種子在其他 Client 成為種子之前,可能需要上傳 150%~ 200%于 Torrent 的數(shù)據(jù)量。而現(xiàn)在,一個(gè)運(yùn)行在超級(jí)種子模式下的 Client(對(duì)一個(gè)大的 Torrent 做種),只需要上傳 105%于 Torrent 的數(shù)據(jù)量。這相當(dāng)于一個(gè)普通種子做 種效率的 150%~ 200%。但是,在通常情況下不建議使用超級(jí)種子模式。雖然它有助于稀有數(shù)據(jù)的分發(fā)(因?yàn)樗鼘?duì) Client 的下載選擇做出了限制,同時(shí)也限制了 Clients 下載已經(jīng)部分得到的數(shù)據(jù)),所以超級(jí)種子模式只適用于那些最初做種的 Server。 結(jié)束算法 當(dāng)下載將要結(jié)束時(shí),將會(huì)趨向最后的幾個(gè) piecesections 下載減慢,為了加速下載,客戶端向所有 peers 發(fā)送請(qǐng)求下載其沒有的 piece。為了保證傳輸過多的冗余數(shù)據(jù)而到是性能下降,客戶端一旦收到 piecesections,向所有的其他 peers 發(fā)送 cancel 消息。至于什么時(shí)候啟動(dòng) END GAME 算法。規(guī)范沒有給出推薦值。 防冷落算法 偶然情況下, BT 的 peer 端可能會(huì)被它下載的所有的 peers 端阻塞。這種情況下,此 peer 端的下載速率就很低,直到優(yōu)化 unchock 算法找到更好的 peers 端。為了消除這個(gè)問題,當(dāng)超過一分鐘一個(gè) peer 沒有從特定的 peer 得到一個(gè) piece 那么 BT 就認(rèn)為它被那個(gè) peer 冷落。并不上傳給它直到優(yōu)化 unchoke(這是對(duì)于上述的優(yōu)化 unchocke 算法的一個(gè)例外),這就常常會(huì)使多于一個(gè) peers 同時(shí)進(jìn)入優(yōu)化 unchoke 狀態(tài) 。從而使下載速率快速恢復(fù)。 最佳無阻塞算法 當(dāng)同一時(shí)刻通過多個(gè)連接發(fā)送數(shù)據(jù)時(shí), TCP 擁塞控制的效果很差。這樣, Choking就允許 Peers 使用一種 titfortatish 算法來確保他們獲得一個(gè)穩(wěn)定的下載速率。下面介紹的 Choking 算法是目前 BT 客戶端中所廣泛采用的。很重要的一點(diǎn)是,所有新的算法既能用在包含他們?nèi)康木W(wǎng)絡(luò)上,也能用在只包含此算法的網(wǎng)絡(luò)上。好的 Choking 算法應(yīng)該滿足如下準(zhǔn)則: TCP 性能,它應(yīng)限制同時(shí)上傳的數(shù)量; 塞和非阻塞狀態(tài)的頻繁切換( Fibrillation); Peer,為它提供上載; (相對(duì)于當(dāng)前的連接)的時(shí)候,試圖啟用他們,稱作Optimistic Unchoking。 目前使用的 Choking 算法中避免 Fibrillation(抖動(dòng))的唯一策略是:每 10 秒更新被阻塞的 Peers。酬謝( Reciprocation)和限制上傳的數(shù)目通過解除(對(duì)自己感興趣的且擁有最好的上載速率的) 4 個(gè) Peers 的阻塞來管理。這樣可以獲得最大的下載速率。而這四個(gè) Peers 因?qū)焊信d趣而成為下載者。擁有更好的上載速率(相對(duì)于下載者 而言)但對(duì)自己不感興趣的 Peer 被阻塞,但一旦當(dāng)它對(duì)自己感興趣,則阻塞上載速率最慢的下載者,使其取而代之成為新的下載者。如果一個(gè) Client 擁有完整的資源文件,則它將找畢業(yè)設(shè)計(jì)、項(xiàng)目源碼、編程視頻,就上碼農(nóng)網(wǎng) manong365 21 根據(jù)上載速率而不是下載速率來決定阻塞哪些 Peer。對(duì)于 Optimistic Unchoked,在任意時(shí)刻都會(huì)有一個(gè)不被阻塞的 Peer 而不管它的上載速率如何(如果它對(duì)自己感興趣,則成為 4 個(gè)下載者中的一員),至于哪一個(gè) Peer 被 Optimistic Unchoked,會(huì)每 30 秒更新一次。最新連接的 Peer 成為 Optimistic Unchoked 的 可能性是其他 Peers 的 3 倍,這將給他們一個(gè)很好的機(jī)會(huì)去完成一個(gè) Piece 的上載。 最稀有算法 BT 中下載 piece 策略為,最稀少最優(yōu)先原則。每個(gè) peer 都優(yōu)先選擇整個(gè)系統(tǒng)中最少的那些片斷去下載,而那些在系統(tǒng)中相對(duì)較多的片斷,放在后面下載,這樣,整個(gè)系統(tǒng)就趨向于一種更優(yōu)的狀態(tài)。如果不用這種算法,大家都去下載最多的那些片斷,那么這些片斷就會(huì)在系統(tǒng)中分布的越來越多,而那些在系統(tǒng)中相對(duì)較少的片斷仍然很少,最后,某些 peer 就不再擁有其它 peer 感興趣的片斷了,那么系統(tǒng)的參與者越來越少,整個(gè)系統(tǒng)的性能就下降 ??蛻舳送ㄟ^保留每個(gè) peer 端的原始 bitfield 域來決定下載在bitfield 里面出現(xiàn)頻率最小的 piece。程序的具體實(shí)現(xiàn)是通過 have 消息來計(jì)算。在下載過程中,會(huì)不停的收到其它 peer 發(fā)來的 have 消息,每個(gè) have 消息都表明對(duì)方擁有了某個(gè)片斷(即某個(gè)完整的 piece)。那么,為每個(gè)片斷維護(hù)一個(gè)計(jì)數(shù)器,每收到一個(gè) have 消息,相應(yīng)的計(jì)數(shù)器加 1。在選擇片斷的時(shí)候,計(jì)數(shù)器最小的某個(gè)片斷被選中。 “最少優(yōu)先”的一個(gè)例外是在下載剛開始的時(shí)候。此時(shí),下載者沒有任何片斷可供上傳,所以,需要盡快的獲取 一個(gè)完整的片斷。而最少的片斷,通常只有某一個(gè) peer擁有,所以,它可能比多個(gè) peers 都擁有的那些片斷下載的要慢。因此,第一個(gè)片斷是隨機(jī)選擇的,直到第一個(gè)片斷下載完成,才切換到“最少優(yōu)先”的策略。 BT 軟件的模塊的實(shí)現(xiàn) 種子解析模塊的實(shí)現(xiàn) 根據(jù)種子文件的結(jié)構(gòu)信息,我門可以構(gòu)造文件的實(shí)體類,種子文件也可以被稱為元信息文件,它是通過 B 編碼,就是一個(gè) B 編碼的字典。因?yàn)樵谙螺d的文件可能是單個(gè)文件也有可能是多個(gè)文件,所以定義一個(gè)單文件結(jié)構(gòu)體 MetaInfoSingleFile,包含有長度, md5,名字,還有 piece 的長度等屬性,然后再定義一個(gè)結(jié)構(gòu)體為多文件結(jié)構(gòu)體MetaInfoMultiFile。對(duì)于種子文件我們相應(yīng)的定義一個(gè) MetaInfo,這個(gè)類保存種子的信息。 .torrent 說白就是個(gè)文本文件,對(duì)這文本文件讀取保存到一個(gè)字節(jié)數(shù)組里面, MetaInfo通過調(diào)用 parse(QByteArray)方法對(duì)字節(jié)數(shù)組進(jìn)行解析,之后種子的所有信息就保存到一個(gè) MetaInfo 對(duì)象中。 Client 與 Traceker 通信模塊的實(shí)現(xiàn) 解析完種子文件以后,種子的所有信息保存在實(shí)體類里面,可以通過類里面的一些方法獲取種子的信息,完成種 子的解析后,可以從中獲取到 Tracker 服務(wù)器的 URI 后就可以開始和 Tracker 進(jìn)行交互,在與 traceker 連接之后, tracker 可以對(duì)一些自己下載進(jìn)度進(jìn)行統(tǒng)計(jì),并且客戶端可以獲取到當(dāng)前下載同一文件的 peer 的 IP 地址和端口號(hào)。BitTorrent 協(xié)議是在 TCP/IP 協(xié)議之上的應(yīng)用層協(xié)議,客戶端使用 HTTP 協(xié)議與 Tracker進(jìn)行通信, Tracker 通過 Http GET 方法獲取請(qǐng)求,然后 Tracker 服務(wù)器返回信息,返回信息是一個(gè)經(jīng)過 B 編碼的字典,包含著可以下載的 peer 的 IP 地址和端口號(hào),和一些 peer找畢業(yè)設(shè)計(jì)、項(xiàng)目源碼、編程視頻,就上碼農(nóng)網(wǎng) manong365 22 的長度等信息,然后客戶端可以根據(jù)返回信息進(jìn)行連接下載 peer,并且在客戶端下載完成 peer 以后,把相應(yīng)的信息提交 daotracker 服務(wù)器,其他客戶端可以根據(jù) Tracker 服務(wù)器上面的信息得到你的 ip 地址和端口號(hào),別人和你建立連接以后就可以下載你已經(jīng)下載好的 TrackerClient,這個(gè)類主要和 traceker服務(wù)器進(jìn)行通信,包括請(qǐng)求和獲取。 Peer 之間的通信模塊的實(shí)現(xiàn) Peer 之間通信協(xié)議可以稱為 peer 連線協(xié)議,它是一個(gè)基于 TCP 協(xié)議的應(yīng)用層協(xié)議,為防止 有的 peer 只下載不上傳, BT 協(xié)議建議:客戶端只給那些向它提供最快下載速度的 4 個(gè) Peer 上傳數(shù)據(jù),簡單地說就是誰向我提供下載,我就提供數(shù)據(jù)供他下載;誰不提供數(shù)據(jù)給我下載,我的數(shù)據(jù)也不會(huì)上傳給它。客戶端每隔一定時(shí)間,重新計(jì)算從各個(gè)peer 處下載數(shù)據(jù)的速度,將下載速度最快的 4 個(gè) peer 解除阻塞,允許這 4 個(gè) peer 從客戶端下載數(shù)據(jù),同時(shí)將其他 peer 阻塞。對(duì)客戶端與其他 peer 建立連接之后,既要做服務(wù)器又要做客戶端,所以相應(yīng)的有個(gè)作為客戶端的類和作為服務(wù)器的類,一個(gè)負(fù)責(zé)從別的 peer 下載片段并且保存,一個(gè)負(fù)責(zé)上傳 本地已經(jīng)下載好的片段 。 軟件出錯(cuò)模塊的實(shí)現(xiàn) 在整個(gè)軟件系統(tǒng)中定義 5 中錯(cuò)誤狀態(tài),并且對(duì)這五種錯(cuò)誤進(jìn)行了相應(yīng)的處理 有 UnknownError,TorrentParseError,InvalidTrackerError,FileErrorServerError 在打開種子文件,和文件解析過程中或通信過程可能出現(xiàn)不同錯(cuò)誤,要對(duì)不同的錯(cuò)誤進(jìn)行捕獲,并且進(jìn)行處理。 下載任務(wù)狀態(tài)的實(shí)現(xiàn) 對(duì)于整個(gè)軟件來說,添加一個(gè)種子文件,即為創(chuàng)建一個(gè)任務(wù),任務(wù)的狀態(tài)分為 : Idle, Paused,Stopping,Preparing,Searching,Connecting,WarmingUp,Downloading, EndGame, peer 與 peer 通信過程中或 client 與 traceker 服務(wù)器通信過程中會(huì)影響任務(wù)的狀態(tài)。 軟件主界面模塊的實(shí)現(xiàn) 主界面效果如圖所示 。 找畢業(yè)設(shè)計(jì)、項(xiàng)目源碼、編程視頻,就上碼農(nóng)網(wǎng) manong365 23 圖 53 BT軟件下載任務(wù)效果圖 找畢業(yè)設(shè)計(jì)、項(xiàng)目源碼、編程視頻,就上碼農(nóng)網(wǎng) manong365 24 代碼實(shí)現(xiàn) 添加種子代碼 如圖所示。 圖 55 BT軟件添加種子代碼圖 圖 54 BT軟件添加任務(wù)圖 找畢業(yè)設(shè)計(jì)、項(xiàng)目源碼、編程視頻,就上碼農(nóng)網(wǎng) manong365 25 圖 56 BT軟件種子添加代碼圖 //添加 Torrent bool MainWindow::addTorrent(){ //選擇 torrent 文件 QString fileName = QFileDialog::getOpenFileName(this, tr(請(qǐng)選擇一個(gè)文件),lastDirectory,tr(種子文件 (*.torrent)。所有文件 (*.*)))。 if (()) return false。 lastDirectory = QFileInfo(fileName).absolutePath()。 qDebug()lastDirectoryendl。 //顯示添加種子文件對(duì)話框 AddTorrentDialog *addTorrentDialog = new AddTorrentDialog(this)。 addTorrentDialogsetTorrent(fileName)。 addTorrentDialogdeleteLater()。 if (!addTorrentDialogexec()) return false。 // 添加任務(wù)到列表中需要把種子文件的路徑和 保存路徑作為參數(shù)傳過去 addTorrent(fileName, addTorrentDialoggetDestinationFolder())。 if (!saveChanges) { saveChanges = true。 QTimer::singleShot(1000, this, SLOT(saveSettings()))。 } return true。 } 解析種子代碼 MetaInfoSingleFile 是相應(yīng)的單文件結(jié)構(gòu)體 MetaInfoMultiFile 是相應(yīng)的多文件結(jié)構(gòu)體 MetaInfo 是相應(yīng)的種子文
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1