版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
30/30《計算機網(wǎng)絡(luò)系統(tǒng)實踐》報告設(shè)計題目設(shè)計題目:多線程網(wǎng)絡(luò)文件傳輸學(xué)生姓名:學(xué)號:專業(yè)班級:計算機科學(xué)與技術(shù)20XX年1月設(shè)計要求實現(xiàn)單線程文件傳輸實現(xiàn)多線程文件傳輸增加異??刂?,增強程序的魯棒性了解使用winsocket編程了解文件傳輸過程開發(fā)環(huán)境與工具工具Visualstudio20XXQT5C++系統(tǒng)win8.18g內(nèi)存cpui73632qm設(shè)計原理利用QT設(shè)計簡單的圖形界面利用winsocket編程TCP方式實現(xiàn)網(wǎng)絡(luò)通信(阻塞方式)利用windows線程函數(shù)和臨界區(qū)實現(xiàn)多線程控制四、系統(tǒng)功能描述及軟件模塊劃分客戶端:有簡單的GUI,可以選擇存儲路徑,服務(wù)端IP,通信端口PORT,多線程或單線程,向服務(wù)端發(fā)起下載請求,并開始下載服務(wù)端:有簡單的GUI,可以選擇顯示文件路徑,選擇通信端口PORT,選擇多線程或單線程,一旦開啟,進入阻塞狀態(tài),知道客戶端連入,開始傳輸文件五、設(shè)計步驟//客戶端單線程接收函數(shù)voidClient::getready(){ WORDsocketVersion=MAKEWORD(2,0); if(WSAStartup(socketVersion,&wsaData)!=0) { QMessageBox::warning(this,tr("Warning"), tr("Initsocketdllerror!"),QMessageBox::Yes); exit(1); } //創(chuàng)建socket SOCKETc_Socket=socket(AF_INET,SOCK_STREAM,0); if(SOCKET_ERROR==c_Socket) { QMessageBox::warning(this,tr("Warning"), tr("CreateSocketError!"),QMessageBox::Yes); exit(1); } //指定服務(wù)端的地址 sockaddr_inserver_addr; boolok; u_shortus_port=port.toUShort(&ok,10); char*cip; QByteArrayQBA=ip.toLatin1(); cip=QBA.data(); server_addr.sin_family=AF_INET; server_addr.sin_addr.S_un.S_addr=inet_addr(cip); server_addr.sin_port=htons(us_port); if(SOCKET_ERROR==::connect(c_Socket,(SOCKADDR*)&server_addr,sizeof(server_addr))) { QMessageBox::warning(this,tr("Warning"), tr("CanNotConnectToServerIP!"),QMessageBox::Yes); exit(1); } charbuffer[BUFFER_SIZE]; memset(buffer,0,BUFFER_SIZE); char*cpath; QByteArrayQBAp=path.toLatin1(); cpath=QBAp.data(); FILE*fp=fopen(cpath,"wb");//windows下是"wb",表示打開一個只寫的二進制文件 if(NULL==fp) { QMessageBox::warning(this,tr("Warning"), tr("FileCanNotOpenToWrite"),QMessageBox::Yes); exit(1); } else { memset(buffer,0,BUFFER_SIZE);//初始化緩沖區(qū) intlength=0;//開始接收文件 while((length=recv(c_Socket,buffer,BUFFER_SIZE,0))>0) { if(fwrite(buffer,sizeof(char),length,fp)<length) { QMessageBox::warning(this,tr("Warning"), tr("FileWriteFailed!"),QMessageBox::Yes); break; } memset(buffer,0,BUFFER_SIZE); } lalbelMSS->setText("Transformpleted"); } fclose(fp); closesocket(c_Socket); lalbelMSS->setText("Transformpleted"); //釋放winsock庫 WSACleanup();}//server端線程函數(shù)1,主要用于多線程傳輸時分塊發(fā)送文件DWORDWINAPIServer::GetFileProc1(LPVOIDlparam){ Server*p=(Server*)lparam; sockaddr_inserver_addr1;//設(shè)置默認(rèn)地址信息并初始化socket server_addr1.sin_family=AF_INET; server_addr1.sin_addr.s_addr=INADDR_ANY; server_addr1.sin_port=htons(5679); SOCKETm1_Socket=socket(AF_INET,SOCK_STREAM,0); sockaddr_inclient_addr1; bind(m1_Socket,(sockaddr*)&server_addr1,sizeof(server_addr1)); listen(m1_Socket,5); intclient_addr_len1=sizeof(client_addr1); SOCKETm1_New_Socket=accept(m1_Socket,(sockaddr*)&client_addr1,&client_addr_len1);//此處阻塞 charbuffer1[BUFFER_SIZE]; memset(buffer1,0,BUFFER_SIZE); EnterCriticalSection(&cs);//設(shè)置臨界區(qū) char*cpath; QByteArrayQBAp=p->path.toLatin1(); cpath=QBAp.data(); intFileLen_t=p->FileLen;//獲得主線程通信時獲得的文件長度 intSeek=0; FILE*fp=fopen(cpath,"rb");//windows下是"rb",表示打開一個只du的二進制文件 LeaveCriticalSection(&cs); if(NULL==fp) { exit(1); } else { memset(buffer1,0,BUFFER_SIZE); intlength=0; while(FileLen_t>0){ EnterCriticalSection(&cs); int length=fread(buffer1,sizeof(char),BUFFER_SIZE,fp); LeaveCriticalSection(&cs); if(FileLen_t>length) { send(m1_New_Socket,buffer1,length,0); } else { send(m1_New_Socket,buffer1,FileLen_t,0); } Sleep(100); memset(buffer1,0,BUFFER_SIZE); FileLen_t=FileLen_t-length; } } closesocket(m1_New_Socket); closesocket(m1_Socket); fclose(fp); }六、關(guān)鍵問題及其解決方法多線程傳輸文件時,不可以多個socket使用一個端口來發(fā)送,否則會出現(xiàn)錯誤,需要每個線程都創(chuàng)建自己的socket連接來保證文件的順序。Windows創(chuàng)建線程函數(shù)Createthread中的線程函數(shù)在類中(使用QT寫界面,主類是一個繼承了QT的類)要聲明為靜態(tài)函數(shù),要獲得類中的變量,需要傳遞類指針,并用Server*p=(Server*)lparam;重新作為類指針。使用臨界區(qū)來保護共享變量,防止各線程同時訪問寫入時出錯。利用fseek定位各線程數(shù)據(jù)塊在文件中的位置。七、設(shè)計結(jié)果 用TCP協(xié)議的文件傳輸系統(tǒng),有簡單的圖形界面,可以選擇文件和存貯文件路徑,在傳輸文件時可以選擇多線程還是單線程傳輸,如果傳輸過程出錯,可以跟據(jù)出錯的步驟,彈出不同的提示對話框,但由于文件傳輸時基于阻塞方式的,如果服務(wù)端開啟后沒有客戶端連接會陷入阻塞。思考題:我編寫的程序是基于阻塞的,缺點是若客戶端沒有被連接則會陷入未響應(yīng)這個程序目前傳送前的通信內(nèi)容只有文件長度,可以加入文件名稱等內(nèi)容來增強用戶體驗。已經(jīng)實現(xiàn)了多線程的文件傳輸。八、軟件使用說明服務(wù)端點擊chooseyourfile按鈕選擇要傳輸?shù)奈募?,文件路徑會顯示在下方,載PORT出輸入用處通信的端口號,點擊confirm按鈕確認(rèn),點擊threads進行多線程發(fā)送貨點擊listen進行單線程發(fā)送;客戶端點擊chooseyourfile選擇存儲路徑和文件名稱,在IP和PORT輸入主機的IP地址和用于通信的端口號,點擊confirm確認(rèn)內(nèi)容,點擊threads進行多線程接收或accept進行單線程接收。九、參考資料QT5官方幫助文檔網(wǎng)絡(luò)上一些介紹winsocket通信的文章一些API相關(guān)說明十、驗收時間及驗收情況1月3日星期天樊玉琦老師驗收老師提出了網(wǎng)卡是串行傳輸數(shù)據(jù)的,多線程怎么加快文件傳輸速度的問題,由于這方面網(wǎng)絡(luò)上資料比較少,我個人認(rèn)為,發(fā)送數(shù)據(jù)數(shù)先讀在發(fā),可能多線程是利用了讀的時間,別的線程發(fā)送,發(fā)送時,別的線程在讀,這樣分時的方式加快文件傳送速度的。十一、設(shè)計體會這次課程設(shè)計,我花了一個多星期來學(xué)習(xí)相關(guān)內(nèi)容,很多東西都是我本來不會的,比如QT,windowsC++多線程,線程函數(shù)在類中如何控制等,在完成了這個比較完整的課程設(shè)計后,但是由于網(wǎng)上資料較少,我暫時還沒有學(xué)會將VS20XX中的帶QT庫的文件生成可執(zhí)行文件,所以只能上交項目文件…這次實驗讓我比較深刻的體會了winsocket網(wǎng)絡(luò)通信的原理,也讓我發(fā)現(xiàn)了影響網(wǎng)絡(luò)傳輸速度的程序方面的因素,比如發(fā)送緩沖區(qū)的大小,線程數(shù)等。計算機網(wǎng)絡(luò)是很復(fù)雜的,各種因素和各種協(xié)議,傳輸方式都影響著網(wǎng)絡(luò)通信的質(zhì)量,在網(wǎng)絡(luò)滲透在生活的各個方面的今天,對于一個學(xué)習(xí)計算機的人來說,掌握好網(wǎng)絡(luò)方面的知識更加的重要。
路由器配置實驗實驗?zāi)康?.認(rèn)識路由器的端口、型號2.掌握路由器的路由配置3.理解網(wǎng)絡(luò)互聯(lián)的基本原理實驗環(huán)境與設(shè)備本實驗在PC機上利用模擬軟件PacketTracerV6進行操作。實驗內(nèi)容1.路由器接口的配置 2.靜態(tài)路由配置3.默認(rèn)路由配置4.動態(tài)路由配置本次實驗的主要任務(wù)是了解路由器的基本設(shè)置,和網(wǎng)絡(luò)之間的連接關(guān)系。通過這次的實驗很好的掌握了各個網(wǎng)段之間的,各個路由器下的pc的連接情況。通過對靜態(tài),默認(rèn),動態(tài)路由配置,使得各個路由器下的PC相互通信。四、實驗步驟1.路由器接口的配置創(chuàng)建如圖所示的拓?fù)浣Y(jié)構(gòu)圖。(1)為主機PC0,PC1,PC2配置IP地址、子網(wǎng)掩碼和默認(rèn)網(wǎng)關(guān)為路由器的各個接口分配IP地址和子網(wǎng)掩碼,交換機不用配置。(3)查看路由器的路由表使用命令:showiproute顯示路由表中的路由信息。保存此時路由器顯示的路由信息,以便與后面的實驗結(jié)果進行比較。(4)測試主機之間的連通性2.配置靜態(tài)路由(1)在Router0中添加一條到網(wǎng)絡(luò)192.168.3.0的靜態(tài)路由,命令如下:Router(config)#iproute192.168.3.0255.255.255.0172.16.1.1(2)再去查看Router0路由表,與步驟中2的路由表進行對比,觀察路由表變化情況。(3)在Router2中添加一條到網(wǎng)絡(luò)192.168.1.0的路由后,路由表如下:Router(config)#iproute192.168.1.0255.255.255.0172.16.1.2(4)測試PC0與PC2的連通性(5)在Router1和Router2中各添加一條靜態(tài)路由,以實現(xiàn)PC1與PC2的互通。(6)測試PC0與PC1的連通性(7)請分別在Router0和Router1中添加靜態(tài)路由,以實現(xiàn)PC0與PC1的互通。請在實驗報告中記錄你所使用的配置命令、主機間的連通性測試結(jié)果以及Router0和Router1的路由表(以截圖形式)。3.設(shè)置默認(rèn)路由(1)首先刪除Router0中到達PC1和PC2所在網(wǎng)絡(luò)的靜態(tài)路由,參考在Router0中添加一條默認(rèn)路由再測試PC0與PC1,PC2的連通性。4.動態(tài)路由協(xié)議RIP配置(1)查看三個路由器的路由表信息,可看到此時路由表中只有直連路由C。在Router0上配置RIP協(xié)議在Router1,Router2上配置RIP協(xié)議的命令同上。查看三個路由器的路由表,可看到各路由器學(xué)到的網(wǎng)段。測試各主機間的連通性五.實驗心得通過使用CiscoPacket
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 六下語文古詩教學(xué)課件教學(xué)課件教學(xué)
- 三年級語文第26課課件教學(xué)課件教學(xué)
- 2024年酒泉客運從業(yè)資格證考試培訓(xùn)試題和答案
- 生理健康課件教學(xué)課件
- 2024年嘉峪關(guān)道路旅客運輸駕駛員從業(yè)資格考試題庫
- 2025屆四川省成都市實驗高級中學(xué)生物高二上期末教學(xué)質(zhì)量檢測模擬試題含解析
- 2024年福建客運資格專業(yè)能力考試考什么
- 2025屆江西省臨川一中南昌二中九江一中新余一中等九校重點中學(xué)協(xié)作體語文高三上期末調(diào)研試題含解析
- 2025屆江西省撫州第一中學(xué)生物高三上期末學(xué)業(yè)水平測試模擬試題含解析
- 2025屆湖南師大附中思沁中學(xué)高二上數(shù)學(xué)期末統(tǒng)考試題含解析
- LCM出貨檢驗標(biāo)準(zhǔn)
- 江蘇開放大學(xué)2023年秋《馬克思主義基本原理 060111》形成性考核作業(yè)2-實踐性環(huán)節(jié)(占過程性考核成績的30%)參考答案
- 公司2023年消防安全資金投入計劃和預(yù)算方案
- 石材廠設(shè)計方案范本
- GB/T 43153-2023居家養(yǎng)老上門服務(wù)基本規(guī)范
- 社會主義發(fā)展歷程-PPT
- 民辦職業(yè)培訓(xùn)機構(gòu)地址變更申請表
- 冬季安全生產(chǎn)特點及預(yù)防措施
- 視頻短片制作合同范本
- 抑郁癥與睡眠障礙課件
- 供應(yīng)鏈墊資采購合同范本
評論
0/150
提交評論