版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
計(jì)算機(jī)科學(xué)與技術(shù)《計(jì)算機(jī)網(wǎng)絡(luò)》實(shí)驗(yàn)報(bào)告socket編程學(xué)院姓名學(xué)號(hào)(后邊附有源代碼地址)年月日Phase1:EstablishingClient-ServerCommunications題目要求此題目要求實(shí)現(xiàn)一個(gè)通過TCP套接字來建立連接的通訊,服務(wù)器和客戶端需要實(shí)現(xiàn)以下5個(gè)功能:客戶端與服務(wù)器建立連接,需要用戶名和加密密碼??蛻舳税l(fā)送想分享的文件名給服務(wù)器。客戶端發(fā)送一個(gè)想下載的文件查詢??蛻舳孙@示收到的回復(fù)信息,并顯示。登出。開發(fā)環(huán)境操作系統(tǒng):Linux2.6.32-279.el6.x86_64編程語言:C99編譯器:GCC4.4.620120305(RedHat4.4.6-4)程序詳解網(wǎng)絡(luò)和I/O使用單線程利用epoll實(shí)現(xiàn)非阻塞異步IO。此部分功能主要用于實(shí)現(xiàn)多客戶端的網(wǎng)絡(luò)I/O的輪詢處理,使用Linux內(nèi)核中的EPOLL特性實(shí)現(xiàn)。維護(hù)一個(gè)哈希表(Client),用于將文件描述符與客戶端數(shù)據(jù)(如接收緩沖區(qū)、發(fā)送緩沖區(qū)和會(huì)話狀態(tài)等)進(jìn)行映射。對(duì)應(yīng)主要的功能函數(shù)包括:intnewclientid(intfd)用于在Client哈希表中創(chuàng)建新項(xiàng),與提供的文件描述符(fd)對(duì)應(yīng)。intfd2clientid(intfd)用于在Client哈希表中根據(jù)提供的文件描述符(fd)查找項(xiàng)目。voidsetnonblocking(intsock)設(shè)置SOCKET為非阻塞模式intserver_startup(u_shortport)在指定的端口上啟動(dòng)trackerd監(jiān)聽服務(wù),并設(shè)置epollintpush_data(structclient_data*client,char*buf,intlen)向指定的客戶端推送數(shù)據(jù),會(huì)先進(jìn)入客戶端數(shù)據(jù)體內(nèi)的發(fā)送緩沖區(qū),再等待由epoll通知就緒時(shí)發(fā)送voidclose_client(intclientid)關(guān)閉指定的客戶端,釋放資源intserver_loop()網(wǎng)絡(luò)服務(wù)循環(huán),調(diào)用epoll來接受連接和就緒通知,并監(jiān)視連接中斷,如有數(shù)據(jù)就緒則使用recv放入接收緩沖區(qū),如通知發(fā)送就緒則將用send將發(fā)送緩沖區(qū)中的數(shù)據(jù)發(fā)送至客戶端。對(duì)于新客戶端連接,調(diào)用accept。以上操作都是非阻塞的。數(shù)據(jù)包處理inthandle_packet(structclient_data*client)立即處理接收緩沖區(qū)中的完整數(shù)據(jù)包(即以”\n”結(jié)尾的消息),將處理完成的部分從緩沖區(qū)中移除intpush_packet(structclient_data*client,charconst*fmt,...)按指定的格式化方式向客戶端發(fā)送數(shù)據(jù)包,是push_data的上層封裝inthandle_share(structclient_data*client,char*command,intlen)處理SHRE消息inthandle_search(structclient_data*client,char*command,intlen)處理SRCH消息inthandle_quit(structclient_data*client,char*command,intlen)處理QUIT消息inthandle_login(structclient_data*client,char*command,intlen)處理LGIN消息inthandle_command(structclient_data*client,char*command,intlen)核心消息分發(fā)函數(shù),將根據(jù)消息前4字節(jié)判斷消息類型,并調(diào)用相應(yīng)處理函數(shù)進(jìn)行實(shí)際處理用戶模塊intuser_check(char*username,char*password)驗(yàn)證指定的用戶名密碼,正確返回0,否則返回-1intuser_load(char*htpasswd)從指定的文件載入用戶名和密碼,每行一個(gè),格式如user:pwd文件列表模塊intshare_add(char*ipaddr,char*port,char*name,char*owner)添加新的文件分享structfile_share*share_get_head()獲取第一個(gè)文件分享(這是一個(gè)鏈表,獲取鏈表中的表頭)intshare_remove_by_owner(char*owner)刪除由特定用戶發(fā)布的文件分享(用來在用戶斷開連接或QUIT時(shí)清理)程序流程圖圖1服務(wù)器圖2 客戶端5程序源代碼 詳見“源碼”文件夾中的“phase1”文件夾項(xiàng)目。Phase2:EstablishingPeer-PeerCommunications題目要求在Phase1的基礎(chǔ)上,為客戶端增加“PING發(fā)送/響應(yīng)”和“文件請(qǐng)求/傳輸”功能。PING發(fā)送/響應(yīng):通過UDP協(xié)議發(fā)送數(shù)據(jù)包到PEER,PEER在收到后立即回復(fù),以此測定RTT。文件請(qǐng)求/傳輸:PEER將作為服務(wù)器提供文件分享功能,接受來自其它PEER的連接,處理LGIN和GETF請(qǐng)求,將文件傳輸給其它PEER。開發(fā)環(huán)境操作系統(tǒng):Linux2.6.32-279.el6.x86_64編程語言:C99編譯器:GCC4.4.620120305(RedHat4.4.6-4)程序詳解PING接收模塊(pingd)用來提供職守服務(wù),接受PING數(shù)據(jù)包并立即響應(yīng)功能函數(shù)包括:intpingd_startup(u_shortport)在指定UDP端口上啟用PING職守服務(wù),使用EPOLL輪詢接受數(shù)據(jù)包,目前將使用與filed相同的端口號(hào)提供服務(wù)(TCP與UDP可使用相同的端口號(hào))intpingd_loop()PING服務(wù)循環(huán),調(diào)用epoll來接收數(shù)據(jù)包通知,如有數(shù)據(jù)則立即發(fā)送響應(yīng)PING發(fā)送模塊(ping)用來發(fā)送PING數(shù)據(jù)包,并獲取RTT時(shí)間功能函數(shù)包括:intping(char*ipaddr,u_shortport)向指定的IP地址和端口發(fā)送PING數(shù)據(jù)包,在時(shí)限內(nèi)等待返回,并返回RTT時(shí)間(毫秒)文件服務(wù)器(filed)與trackerd架構(gòu)相似,提供一對(duì)多的P2P文件傳輸TCP服務(wù)器。使用單線程利用epoll實(shí)現(xiàn)非阻塞異步IO。功能函數(shù)包括:intnewpeerid(intfd)用于在Peer哈希表中創(chuàng)建新項(xiàng),與提供的文件描述符(fd)對(duì)應(yīng)。intfd2peerid(intfd)用于在Peer哈希表中根據(jù)提供的文件描述符(fd)查找項(xiàng)目。voidsetnonblocking(intsock)設(shè)置SOCKET為非阻塞模式intfiled_startup(u_shortport)在指定的端口上啟動(dòng)filed監(jiān)聽服務(wù),并設(shè)置epoll。目前傳入的參數(shù)為0,因此filed將隨機(jī)監(jiān)聽一個(gè)端口作為服務(wù)(如果固定的話可能出現(xiàn)地址被占用)intfiled_push_data(structclient_data*client,char*buf,intlen)向指定的Peer推送數(shù)據(jù),會(huì)先進(jìn)入客戶端數(shù)據(jù)體內(nèi)的發(fā)送緩沖區(qū),再等待由epoll通知就緒時(shí)發(fā)送voidclose_peer(intclientid)關(guān)閉指定的Peer連接,釋放資源intfiled_loop()網(wǎng)絡(luò)服務(wù)循環(huán),調(diào)用epoll來接受連接和就緒通知,并監(jiān)視連接中斷,如有數(shù)據(jù)就緒則放入接收緩沖區(qū),如通知發(fā)送就緒則將發(fā)送緩沖區(qū)中的數(shù)據(jù)發(fā)送至客戶端,與trackerd不同的是,這里要處理文件發(fā)送過程,使用內(nèi)核特性提供的sendfile()函數(shù)實(shí)現(xiàn)零拷貝發(fā)送,邏輯上即從文件讀取一部分并發(fā)送,然后等待下次發(fā)送就緒時(shí)再發(fā)送下一部分,直到EOF時(shí),發(fā)送preamble\n并恢復(fù)文件發(fā)送標(biāo)志u_shortfiled_get_port()獲取filed目前監(jiān)聽的端口號(hào)intfiled_add_share(char*filename)添加新的文件分享,以便在其它PEER請(qǐng)求時(shí)驗(yàn)證合法性char*filed_get_share_path(char*filename)獲取文件分享時(shí),文件名對(duì)應(yīng)的完整路徑。如果沒有經(jīng)過add則返回NULL文件請(qǐng)求模塊(file)用來連接filed實(shí)現(xiàn)文件傳輸和保存功能函數(shù)包括:intfile_recv()文件請(qǐng)求過程,負(fù)責(zé)發(fā)送LGIN,等待LRES,發(fā)送GETF,解析FILE指令,打開并寫入文件,關(guān)閉連接intfile_fetch(structfile_item*item)初始化文件請(qǐng)求,負(fù)責(zé)建立和關(guān)閉到filed的連接后臺(tái)服務(wù)(background)執(zhí)行在子線程中,負(fù)責(zé)處理服務(wù)循環(huán)功能函數(shù)包括:i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆遼寧省沈陽市高三下學(xué)期第五次調(diào)研考試數(shù)學(xué)試題含解析
- 陜西寶雞金臺(tái)區(qū)2025屆高三第五次模擬考試英語試卷含解析
- 《solidworks 機(jī)械設(shè)計(jì)實(shí)例教程》 課件 任務(wù)7.2 變速箱體的設(shè)計(jì)
- 河北省滄州市滄縣鳳化店中學(xué)2025屆高考英語一模試卷含解析
- 公共行政學(xué)課件新
- 湖北省宜昌市高中教學(xué)協(xié)作體2025屆高三第二次調(diào)研語文試卷含解析
- 2025屆山西省太原市迎澤區(qū)五中高三第二次模擬考試數(shù)學(xué)試卷含解析
- 山西省朔州市應(yīng)縣一中2025屆高考英語二模試卷含解析
- 湖南省洞口縣2025屆高考英語倒計(jì)時(shí)模擬卷含解析
- 2025屆天津市七校重點(diǎn)中學(xué)高考沖刺押題(最后一卷)英語試卷含解析
- ebz220掘進(jìn)機(jī)安標(biāo)受控件明細(xì)表
- 公寓de全人物攻略本為個(gè)人愛好而制成如需轉(zhuǎn)載注明信息
- 2023年山東省普通高中學(xué)業(yè)水平考試數(shù)學(xué)試題會(huì)考真題
- 國家公共英語(三級(jí))筆試模擬試卷131(題后含答案及解析)
- 《中文版SolidWorks 2019機(jī)械設(shè)計(jì)從入門到精通 》配套教學(xué)課件
- 充電樁考試真題及答案
- 科研倫理與學(xué)術(shù)規(guī)范答案
- 企業(yè)員工心理健康培訓(xùn)珍愛生命心理健康培訓(xùn)課件
- 小班 社會(huì)語言 懂禮貌的好寶寶 課件(互動(dòng)版)
- 2022-2023學(xué)年小學(xué)一年級(jí)語文上冊(cè)無紙筆化測試評(píng)價(jià)方案(含測試題)
- 基坑支護(hù)方案帶計(jì)算書
評(píng)論
0/150
提交評(píng)論