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

正文內(nèi)容

一種p2p內(nèi)容下載緩存系統(tǒng)設(shè)計(jì)和下載軟件開發(fā)-資料下載頁(yè)

2025-07-28 10:10本頁(yè)面
  

【正文】 t(sockfd)開始(main)Listen客戶端請(qǐng)求內(nèi)容的連接accept 客戶端的P2P內(nèi)容請(qǐng)求使用fork()函數(shù)創(chuàng)建一子進(jìn)程等待客戶端發(fā)送主動(dòng)握手信息向Client發(fā)送被動(dòng)握手信息收到Client主動(dòng)握手信息向Client發(fā)送bitfield信息子進(jìn)程父進(jìn)程建立新socket 與客戶端通信解析握手信息,得到Info_hash收到Client的interest信息向Client發(fā)送unchock信息解析Client發(fā)來(lái)的request信息根據(jù)request信息返回piece信息傳遞內(nèi)容完整嗎?結(jié)束子進(jìn)程,釋放資源圖44 P2P內(nèi)容服務(wù)程序流程圖 數(shù)據(jù)結(jié)構(gòu)與關(guān)鍵算法分析 socketint socket ( /*返回一個(gè)整形的socket描述符 */ int family, /*指明所使用的協(xié)議簇 */ int type, /*socket的類型,UDP或是TCP */ int protocol /*指明使用協(xié)議名 */)。178。 P2P種子下載進(jìn)程sockfd: 監(jiān)聽從路由器轉(zhuǎn)發(fā)來(lái)客戶端的數(shù)據(jù)報(bào)的socket描述符;clientfd: 與客戶端進(jìn)行通信所使用的socket描述符;seeddwnfd: 從種子服務(wù)器下載種子的socket描述符;contentdwnfd: 從內(nèi)容服務(wù)器上下載內(nèi)容文件的socket描述符;178。 P2P內(nèi)容服務(wù)進(jìn)程sockfd: 監(jiān)聽從客戶端發(fā)送的連接請(qǐng)求的socket描述符;dwnsockfd: 接受客戶端連接,并提供下載服務(wù)的socket描述符; sockaddrstruct sockaddr_in {   short int sin_family。 /* 地址族 */   unsigned short int sin_port。 /* 端口號(hào) */   struct in_addr sin_addr。 /* IP地址 */   unsigned char sin_zero[8]。 /* 填充0 以保持與struct sockaddr同樣大小 */   }。178。 P2P種子下載進(jìn)程server_addr:: 服務(wù)器監(jiān)聽客戶端發(fā)來(lái)數(shù)據(jù)報(bào)的sockaddr。router_addr: 路由器將P2P數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)給P2P緩存服務(wù)器的sockaddr;getclient_addr: 請(qǐng)求種子的客戶端的sockaddr;seedserver_addr: 種子服務(wù)器的sockaddr;contentserver_addr: 內(nèi)容服務(wù)器的sockaddr;178。 P2P內(nèi)容服務(wù)進(jìn)程server_addr: 用于向客戶端提供內(nèi)容上傳服務(wù)的服務(wù)器的sockaddr;client_addr: 客戶端向內(nèi)容服務(wù)器進(jìn)行連接請(qǐng)求的sockaddr; 所使用的端口178。 P2P種子下載進(jìn)程listenport: 3333 監(jiān)聽客戶端連接的端口;get_dest_port: 8080 HTTP服務(wù)器監(jiān)聽的服務(wù)器端口;content_svr_port:5555 內(nèi)容服務(wù)器監(jiān)聽的服務(wù)端口;178。 P2P內(nèi)容服務(wù)進(jìn)程serverport: 68816889 服務(wù)器監(jiān)聽客戶端發(fā)送連接請(qǐng)求的端口; peer之間的握手信息格式(BitTorrent protocol協(xié)議[12])pstrlenpstrreservedinfo_hashpeer_id1) pstrlen:pstr的長(zhǎng)度,是單一的原始字節(jié)(通常為19)。2) pstr:協(xié)議的字符串標(biāo)志(通常為BitTorrent protocol)。3) reserved:8字節(jié)保留字。4) info_hash:元信息文件中的鍵info的20字節(jié)SHA1哈希值。5) peer_id:客戶端使用的唯一性ID,20字節(jié)字符串。 消息流message的格式[13]長(zhǎng)度前綴消息 ID負(fù)載。長(zhǎng)度前綴是一個(gè)4字節(jié)的大尾端值,消息ID是一個(gè)10進(jìn)制字符,負(fù)載視消息類型而定。a) keepalive:len=0000 keepalive消息長(zhǎng)度固定,消息長(zhǎng)度后面沒有任何數(shù)據(jù)。peer在一段時(shí)間內(nèi)都接收不到消息的話,可能會(huì)關(guān)閉連接,所以可以發(fā)送keepalive消息維持連接。該消息通常每?jī)煞昼姲l(fā)送一次;b) chock:len=0001id=0 chock消息長(zhǎng)度固定,且沒有負(fù)載;c) unchock:len=0001id=1 unchock消息長(zhǎng)度固定,且沒有負(fù)載;d) interested:len=0001id=2 interested消息長(zhǎng)度固定,且沒有負(fù)載;e) not interested:len=0001id=3 not interested消息長(zhǎng)度固定,且沒有負(fù)載;f) have:len=0005id=4piece index have消息長(zhǎng)度固定,負(fù)載是一個(gè)片的索引,該索引從零開始,是成功下載并且通過(guò)哈希驗(yàn)證的;g) bitfield:len=0001+Xid=5bitfield bitfield消息可能只在握手系列完成后立刻發(fā)送,在這之前沒有其他任何消息發(fā)送。它是可選的,而且如果客戶端不擁有任何片則不需要發(fā)送。bitfield消息是變長(zhǎng)的,X指bitfield的長(zhǎng)度。負(fù)載是一個(gè)比特組表示已經(jīng)成功下載的片,第一個(gè)字節(jié)的高比特位表示索引為0的片,置0的比特位表示缺失的片,置1則表示有效的可提供的片。最后剩余的比特位置0。長(zhǎng)度不正確的bitfield應(yīng)視為出錯(cuò)。如果長(zhǎng)度不正確,或剩余比特位有任何位置1,客戶端都應(yīng)該丟棄連接;h) request:len=0013id=6indexbeginlength request消息長(zhǎng)度固定,用于請(qǐng)求一個(gè)塊。index:4字節(jié)整數(shù),指明片的索引號(hào)。begin:4字節(jié)整數(shù),指明片內(nèi)的字節(jié)偏移量。length:4字節(jié)整數(shù),指明要求的長(zhǎng)度;i) piece:len=0009+Xid=7indexbeginblock piece消息變長(zhǎng),X指block的長(zhǎng)度。index:4字節(jié)整數(shù),指明片的索引號(hào)。begin:4字節(jié)整數(shù),指明片內(nèi)的字節(jié)偏移量。block:塊數(shù)據(jù),是指定索引的片的子集;j) cancel:len=0013id=8indexbeginlength cancel消息固長(zhǎng),負(fù)載和request消息的一樣。一般用于“End Game”階段,用于取消請(qǐng)求request;k) port:len=0003id=9listenport port消息由實(shí)現(xiàn)了DHT Tracker的新版本客戶端軟件發(fā)出。監(jiān)聽端口是該peer的DHT節(jié)點(diǎn)的監(jiān)聽端口,該peer應(yīng)被插入到當(dāng)?shù)芈酚杀砩希ㄈ绻鸇HT Tracker支持的話);說(shuō)明:在連接開始時(shí),Peer之間的狀態(tài)為是“阻塞”和“無(wú)興趣”狀態(tài),即:216。 am_choking = 1  (am_choking:該客戶端阻塞了此peer)216。 am_interested = 0  (am_interested:該客戶端對(duì)此peer感興趣)216。 peer_choking = 1  (此peer阻塞了該客戶端)216。 peer_interested = 0 (此peer對(duì)該客戶端感興趣) peer結(jié)構(gòu)體P2P緩存服務(wù)器向client返回的peer(結(jié)構(gòu)體)列表(列表中包含N個(gè)peer信息),列表中包含4個(gè)字節(jié)的IP地址,2個(gè)字節(jié)的Port端口號(hào)。struct peer { struct in_addr sin_addr。 /* IP地址 */ unsigned short int sin_port。 /* 端口號(hào) */ }。 HTTP GET請(qǐng)求格式每個(gè)HTTP請(qǐng)求都包含兩個(gè)部分:1) HTTP請(qǐng)求行,為GET;2) HTTP請(qǐng)求中的可選消息頭,這些消息頭會(huì)由于使用的HTTP客戶端瀏覽器或客戶端瀏覽器配置選項(xiàng)的不同而不同。a) HTTP請(qǐng)求:請(qǐng)求的方法是GET,“/”表示請(qǐng)求Web服務(wù)器的根目錄,“HTTP/”表示的是URI(Uniform Resource Identifier,統(tǒng)一資源標(biāo)識(shí)符)及其版本;b) Accept:指定客戶端能夠接收的內(nèi)容類型,內(nèi)容類型中的先后次序表示客戶端接收的先后次序。這里可以看到客戶端能夠接收的類型有g(shù)if、bitmap、jpeg等等。c) AcceptLanguage:指定優(yōu)先選擇的語(yǔ)言;d) AcceptEncoding:指定內(nèi)容編碼類型;e) UserAgent:包含HTTP客戶端運(yùn)行的瀏覽器類型;f) Host:包含的主機(jī)信息;g) Connection:指定的連接類型。 數(shù)據(jù)定義178。 P2P種子下載進(jìn)程LISTENPORT 3333 P2P種子下載進(jìn)程監(jiān)聽端口;LISTENNUM 1000 P2P種子下載進(jìn)程監(jiān)聽連接的最大數(shù);MAXDATA 1512 HTTP GET請(qǐng)求內(nèi)容的最大字節(jié)數(shù);MAXMSG 5109 客戶端與服務(wù)器之間進(jìn)行交換信息的最大字節(jié)數(shù),也即是支持最大 每片為4M字節(jié)的文件下載;MAXSEED 1024*1024 種子文件的最大字節(jié)數(shù),可支持1M以內(nèi)在種子文件;MAXPIECE 8*100*1024 內(nèi)容文件生成種子時(shí)允許最大的分片數(shù),假設(shè)每片大小為128KB, 那么該系統(tǒng)支持100G以上的文件下載; 178。 P2P內(nèi)容服務(wù)進(jìn)程LISTENNUM 1000 P2P內(nèi)容服務(wù)進(jìn)程監(jiān)聽連接的最大數(shù);MAXREAD 4096 從文件中讀取到緩沖區(qū)read_buf中數(shù)據(jù)的最大字節(jié)數(shù),也是每片 的最大數(shù);MAXMSG 5109 客戶端與服務(wù)器之間進(jìn)行交換信息的最大字節(jié)數(shù),也即是支持最大 每片為4M字節(jié)的文件下載;SERVERPORT 68816889 P2P內(nèi)容服務(wù)進(jìn)程監(jiān)聽端口; 系統(tǒng)軟件測(cè)試 系統(tǒng)測(cè)試環(huán)境由于本系統(tǒng)是面向ISP開發(fā)和使用的,但是由于條件限制,不能再真實(shí)的ISP出口處進(jìn)行測(cè)試,因此選擇在局域網(wǎng)內(nèi)測(cè)試。本次測(cè)試的四臺(tái)計(jì)算機(jī)處于同一個(gè)局域網(wǎng),,,。系統(tǒng)配置表見41,網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)[14]見圖45。圖45 系統(tǒng)測(cè)試拓?fù)浣Y(jié)構(gòu)圖表41 系統(tǒng)測(cè)試配置表用戶系統(tǒng)配置用戶AWindowsXP+Linux系統(tǒng)虛擬機(jī),虛擬機(jī)網(wǎng)絡(luò)使用橋接方式 IP地址:用戶BWindowsXP+Linux系統(tǒng)虛擬機(jī),虛擬機(jī)網(wǎng)絡(luò)使用橋接方式 IP地址:用戶CWindowsXP+Linux系統(tǒng)虛擬機(jī),虛擬機(jī)網(wǎng)絡(luò)使用橋接方式 IP地址:用戶DWindowsXP+Linux系統(tǒng)虛擬機(jī),虛擬機(jī)網(wǎng)絡(luò)使用橋接方式 IP地址:由于測(cè)試環(huán)境的限制,用戶A作為ISP下P2P內(nèi)容緩存服務(wù)器,用戶B種子服務(wù)器和原始內(nèi)容文件服務(wù)器,用戶C和用戶D作為ISP下普通的網(wǎng)絡(luò)接入用戶,用于請(qǐng)求P2P文件下載。 系統(tǒng)測(cè)試時(shí)遇到的問(wèn)題 socket通信中bind問(wèn)題在使用socket通信中,bind()是一個(gè)很重要的函數(shù),一般在服務(wù)器端程序中使用。該函數(shù)是用于將本地IP地址綁定端口號(hào)的,綁定成功返回0,不成功返回1。另外,它主要用于TCP連接,而在UDP連接中則無(wú)此必要。在P2P種子下載程序調(diào)試運(yùn)行過(guò)程中,顯示bind不成功,經(jīng)過(guò)分析,問(wèn)題原因只有兩種:IP地址設(shè)置不對(duì),不是本地IP地址;端口設(shè)置不正確。經(jīng)查找,發(fā)現(xiàn)IP地址設(shè)置為INADDR_ANY(即為本地IP地址),端口選擇8080端口,而8080端口被WWW服務(wù)占用,所以綁定出錯(cuò),改成3333后綁定成功。 進(jìn)程關(guān)閉問(wèn)題在軟件測(cè)試過(guò)程中,發(fā)現(xiàn)程序在響應(yīng)用戶請(qǐng)求結(jié)束后,沒有關(guān)閉子進(jìn)程,子進(jìn)程仍然運(yùn)行。經(jīng)查閱資料發(fā)現(xiàn),Linux系統(tǒng)下提供了兩個(gè)用于關(guān)閉進(jìn)程的函數(shù)[9]exit()和_exit(),當(dāng)程序執(zhí)行到exit和_exit時(shí),進(jìn)程會(huì)無(wú)條件地停止剩下所有的操作,清楚包括PCB在內(nèi)的各種數(shù)據(jù)結(jié)構(gòu),并終止本進(jìn)程的運(yùn)行。但是exit()和_exit()還是有區(qū)別的。最大的區(qū)別就在于exit()函數(shù)在調(diào)用exit系統(tǒng)之前要檢查文件打開情況,把文件緩沖區(qū)中的內(nèi)容寫回文件,而_exit()則不執(zhí)行此操作。最后,在程序最后添加了exit(0)(函數(shù)參數(shù)0指正常結(jié)束),程序運(yùn)行正常,運(yùn)行完畢后自動(dòng)關(guān)閉子進(jìn)程,釋放資源。 文件I/O操作過(guò)程本系統(tǒng)中使用的文件I/O操作均是不帶緩存在I/O操作,主要涉及到5個(gè)函數(shù)[9],open、read、write、lseek、close。當(dāng)需要寫文件時(shí),則執(zhí)行open、(lseek)、write、close;當(dāng)需要讀文件時(shí)則執(zhí)行open、(lseek)、read、close。其中每個(gè)函數(shù)都有規(guī)定好的參數(shù),代入不同的參數(shù),得到不同的結(jié)果。在程序執(zhí)行時(shí),在進(jìn)行文件讀操作中,已存在文件內(nèi)容被清空,文件大小變?yōu)? 。經(jīng)仔細(xì)檢查,發(fā)現(xiàn)在打開文件時(shí),open函數(shù)代入了一個(gè)參數(shù)O_TRUNC,這個(gè)參數(shù)的代表:當(dāng)打開文件存在時(shí),并且以只讀或只寫方式成功打開時(shí),首先全部刪除文件原有數(shù)據(jù),再對(duì)文件進(jìn)行操作,因此才會(huì)發(fā)現(xiàn)原文件大小變?yōu)?。當(dāng)刪除此參數(shù)后,運(yùn)行程序,工作正常。 文件寫操作時(shí),追加與覆蓋的區(qū)別當(dāng)使用P2P方式下載文件時(shí),由于文件采取分片傳輸?shù)姆绞?,因此要多次將受到的?shù)據(jù)寫入到文件中,文件傳送方式是順序的,在打開文件時(shí),就將文件打開發(fā)式設(shè)置為追加方式,在用戶正常下載文件時(shí)運(yùn)行很正常。但是在用戶第二次請(qǐng)求下載該文件時(shí),問(wèn)題就出現(xiàn)了:新下載的數(shù)據(jù)會(huì)自動(dòng)追加到原文件后面,而不會(huì)覆蓋該文件。為了解決問(wèn)題,將文件打開方式中的追加方式去掉,在將接受到數(shù)據(jù)寫入到文件之前,利用lseek函數(shù)將移動(dòng)文件指針,將指針移到存放該數(shù)據(jù)的首地址。經(jīng)過(guò)編譯,運(yùn)行
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1