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

正文內(nèi)容

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

2025-11-27 13:03本頁面

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

  

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