實(shí)驗(yàn)七-網(wǎng)絡(luò)程序設(shè)計(jì)綜合實(shí)驗(yàn)_第1頁(yè)
實(shí)驗(yàn)七-網(wǎng)絡(luò)程序設(shè)計(jì)綜合實(shí)驗(yàn)_第2頁(yè)
實(shí)驗(yàn)七-網(wǎng)絡(luò)程序設(shè)計(jì)綜合實(shí)驗(yàn)_第3頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、網(wǎng)絡(luò)程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱(chēng):win sock編程接口實(shí)驗(yàn)實(shí)驗(yàn)類(lèi)型:設(shè)計(jì)型指導(dǎo)教師:賈浩專(zhuān)業(yè)班級(jí):信安1204姓 名:馬燦學(xué) 號(hào):20123252電子郵件:實(shí)驗(yàn)地點(diǎn):東6 E307實(shí)驗(yàn)日期:實(shí)驗(yàn)成績(jī):實(shí)驗(yàn)七網(wǎng)絡(luò)程序設(shè)計(jì)綜合實(shí)驗(yàn)摘要:本課程設(shè)計(jì)包含了文件傳輸協(xié)議的簡(jiǎn)單設(shè)計(jì)與實(shí)現(xiàn)。文件傳送協(xié)議是一種最基本的應(yīng)用層協(xié)議按照客戶(hù)/服務(wù)器的模式進(jìn)行工作,提供交互式的訪(fǎng)問(wèn), 是INTERNET使用最廣泛的協(xié)議之一。文件傳輸協(xié)議的簡(jiǎn)單設(shè)計(jì)與實(shí)現(xiàn)建立在計(jì) 算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)環(huán)境TCP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)之上,使用socket編程接口編寫(xiě)兩個(gè)程 序,分別為客戶(hù)程序(client.c )和服務(wù)器程序(server.c),

2、利用了已有網(wǎng)絡(luò) 環(huán)境設(shè)計(jì)并實(shí)現(xiàn)簡(jiǎn)單應(yīng)用層協(xié)議。本設(shè)計(jì)包括了具體設(shè)計(jì)任務(wù),基本思路及所涉 及的相關(guān)理論,設(shè)計(jì)流程圖,調(diào)試過(guò)程中出現(xiàn)的問(wèn)題及相應(yīng)解決辦法,實(shí)驗(yàn)運(yùn)行結(jié)果,核心程序,個(gè)人體會(huì)及建議等。關(guān)鍵詞:SOCKETS程,程序一.問(wèn)題描述及設(shè)計(jì)思路I. 1問(wèn)題描述服務(wù)器端:1 .指定一個(gè)目錄作為FTP目錄(之后所有的文件操作均在此目錄下進(jìn)行)2. 接收客戶(hù)端的命令請(qǐng)求并提供相應(yīng)的服務(wù)??蛻?hù)端:完成與FTP用戶(hù)的人機(jī)界面,以命令的方式向服務(wù)器請(qǐng)求服務(wù), 主要的 命令有:1 . CONNECT地址端口號(hào)2. 指定FTP服務(wù)器的IP地址和端口號(hào),連接到服務(wù)器。響應(yīng):連接成功/失 敗。3. LOGIN用戶(hù)

3、名4. 用戶(hù)登錄(假設(shè)在服務(wù)器端有用戶(hù)管理功能)5. 響應(yīng):若用戶(hù)不存在,提示“無(wú)此用戶(hù)”;若用戶(hù)存在,提示“密碼:”;用 戶(hù)輸入密碼后,若正確提示“登錄成功”;若不成功,提示“密碼錯(cuò)誤”。6. 3. DIR7. 顯示FTP服務(wù)器的FTP目錄的文件列表(假設(shè)無(wú)子目錄)8. 響應(yīng):目錄列表(只要文件名即可)。9. 4. GET文件名10. 將FTP目錄下的文件下載到本地,支持?jǐn)帱c(diǎn)續(xù)傳II. 響應(yīng):傳送成功/失敗/無(wú)此文件。12. 5 . PUT文件名13. 將本地文件上傳到FTP目錄,支持?jǐn)帱c(diǎn)續(xù)傳14. 響應(yīng):傳送成功/失敗/無(wú)此文件。15. 6 . HELP客戶(hù)端和服務(wù)器端均有該功能)16.

4、實(shí)驗(yàn)環(huán)境 本次實(shí)驗(yàn)采用MFC工程 工程采用MFC對(duì)話(huà)框界面 工程名稱(chēng)為 MyServer 和。17. 詳細(xì)設(shè)計(jì)過(guò)程1.2設(shè)計(jì)思路1. FTP協(xié)議基礎(chǔ)FTP是TCP/IP協(xié)議組中的協(xié)議之一,該協(xié)議是In ternet文件傳送的基礎(chǔ),它由一系列規(guī)格說(shuō)明文檔組成。目標(biāo)是提高文件的共享性,提供非直接使用遠(yuǎn)程計(jì)算機(jī),使存儲(chǔ)介質(zhì)對(duì)用戶(hù)透明和可靠高效地傳送數(shù)據(jù)。簡(jiǎn)單的說(shuō),F(xiàn)TP就是完成兩臺(tái)計(jì)算機(jī)之間的拷貝,從遠(yuǎn)程計(jì)算機(jī)拷貝文件至自己的計(jì)算機(jī)上或從自己計(jì)算 機(jī)中拷貝至遠(yuǎn)程計(jì)算機(jī)上。在TCP/IP協(xié)議中FTP標(biāo)準(zhǔn)命令TCP端口號(hào)為21, Port 方式數(shù)據(jù)端口為20。2. 網(wǎng)絡(luò)文件傳輸原理在通信的時(shí)候主要可以分

5、為兩個(gè)部分。一個(gè)部分是用于傳送控制信息,例如發(fā)送 文件的請(qǐng)求文件的名稱(chēng)、大小等。采用MFC所提供的CSocket類(lèi)的串行化技術(shù)來(lái) 實(shí)現(xiàn),而另一個(gè)部分就是文件的傳輸部分。 對(duì)于文件的傳輸,由于數(shù)據(jù)量相對(duì)來(lái) 說(shuō)比較大,使用兩個(gè)線(xiàn)程。一個(gè)用于發(fā)送,一個(gè)用于接收。這兩個(gè)部分在具體實(shí) 現(xiàn)的時(shí)候分別建立有自己的套接字。FTP編程基礎(chǔ)3. FTP傳輸原理FTP協(xié)議使用兩條單獨(dú)的TCP連接一條專(zhuān)用于發(fā)送FTP命令另一條則專(zhuān)用于 傳遞數(shù)據(jù)。初始建立連接時(shí) 服務(wù)器在21號(hào)端口上接收來(lái)自客戶(hù)端的命令連接。當(dāng)需要傳送數(shù)據(jù)時(shí)文件列表、文件數(shù)據(jù)等客戶(hù)端向服務(wù)器發(fā)出Port命令并進(jìn)入監(jiān)聽(tīng)狀態(tài)等待來(lái)自服務(wù)器的數(shù)據(jù)連接請(qǐng)求。總

6、體功能模塊圖服務(wù)器端眼芬器功能說(shuō)明:線(xiàn)程控制:線(xiàn)程類(lèi)別:選擇線(xiàn)程類(lèi)別,單線(xiàn)程或多線(xiàn)程傳送文件 線(xiàn)程數(shù)設(shè)置: 若選擇多線(xiàn)程,可自行設(shè)置線(xiàn)程數(shù)目, 若選擇單線(xiàn)程,則默認(rèn)線(xiàn)程數(shù)目為1 啟動(dòng)服務(wù)器:設(shè)置好線(xiàn)程控制后,點(diǎn)擊“啟動(dòng)”按鈕啟動(dòng)服務(wù)器端 選取文件:選擇要發(fā)送給客戶(hù)端的文件 發(fā)送文件:獲取要發(fā)送文件屬性:獲取到要傳送給客戶(hù)端的文件的基本屬性, 包括:文件名,大?。˙),已發(fā)送多少(B),文件路徑發(fā)送進(jìn)度顯示:顯示給客戶(hù) 端發(fā)送文件的進(jìn)度 ChatWithServer :啟動(dòng)采用UDP協(xié)議的簡(jiǎn)單聊天系統(tǒng),用來(lái)與客戶(hù)端進(jìn)行通 訊(客戶(hù)端和服務(wù)器端都得啟動(dòng),否則無(wú)法收到) Help :顯示服務(wù)器端使用

7、說(shuō)明 客戶(hù)端/收文件握手服接收文Eever連接服頑取I? 地址HELP接收逬功能說(shuō)明:握手服務(wù)器:輸入服務(wù)器端IP地址,點(diǎn)擊“握手服務(wù)器”按鈕,獲取服務(wù)器端 啟動(dòng)的線(xiàn)程數(shù) 連接服務(wù)器:與服務(wù)器進(jìn)行連接 接收文件:獲取接收文件屬性:獲取到要接收的服務(wù)器端傳來(lái)的文件的基本 屬性,包括:文件名,大?。˙),已接收多少(B),文件存儲(chǔ)路徑接收進(jìn)度顯示: 顯示已接收文件的進(jìn)度 ChatWithServer :啟動(dòng)采用UDP協(xié)議的簡(jiǎn)單聊天系統(tǒng),用來(lái)與客戶(hù)端進(jìn)行通 訊(客戶(hù)端和服務(wù)器端都得啟動(dòng),否則無(wú)法收到) 獲取IP地址:獲取本機(jī)的主機(jī)名及IP地址 HELP:顯示客戶(hù)端使用說(shuō)明2、系統(tǒng)結(jié)構(gòu)即旳迪訊3、主要

8、功能流程圖(1)文件傳輸流程圖2、用例描述(1)文件傳送用例描述用例名稱(chēng):匪務(wù)器曲文件樓輸振務(wù)器端管理員設(shè)宣境程英別和啟功的城瞳敢目.啟功脈券雄,選取文I牛進(jìn)行發(fā)送前薛件,腥務(wù)匝端管理員己坯運(yùn)汙腥爵器端臣序1.服務(wù)翠端管理呂通過(guò)哉標(biāo)點(diǎn)擊姥屋糞別和娃程鎖目弋拉列裊框遊行設(shè)宣,然卷點(diǎn).擊*啟動(dòng)”捜琨 啟動(dòng)弱務(wù)器.丄點(diǎn)出“選取文件"搜齟,選擇鑒傳涇給容戶(hù)端的丈嘩,在文件凰性框申顯示出柏應(yīng)丈件的倍息, 點(diǎn)擊“發(fā)迸文件=按祀.進(jìn)行文件臓.頭點(diǎn)去“退出”按鈕,退出尿勢(shì)器皓4. 塩擊欄幫助授袒可以宣看朋月說(shuō)明5. 用例終Lt苴他李絆盍IL在搜,發(fā)送求超之前脈務(wù)樹(shù)管理罰隨時(shí)可限搜£退1/枚

9、社,鉤止與客戶(hù)嫌的誕按味終止與客 戶(hù)端之間的文件俸送.舁蓉MS:1.處示錯(cuò)淇信息,文件借送失散用洌名稱(chēng):客尸嚅文件傳輸塞與若專(zhuān)F蓉戶(hù)輸入服勢(shì)器站ip地th鍵攙膿勞岳逬行文件攙收前貢筆件土客戶(hù)運(yùn)行客戶(hù)端應(yīng)用淫序I 険務(wù)器端說(shuō)擇底戶(hù),點(diǎn)疋開(kāi)始fi艮務(wù),則迓人醫(yī)聽(tīng)杭態(tài)*等待客二端請(qǐng)求°:.客.=端輸入曲戶(hù)名&那若三展哥器端匹配別衽文加框口五連檳服務(wù)器.壁礙戶(hù)名.述 按尖敗則顯示“連接失敗妙3.枉口址列去框屮點(diǎn)士要上傳的冥件,彈出灼話(huà)征尋1可是否要上4點(diǎn)七是,口上傳又檔至隈 爹誥喘.幵將咒檔列盍辰示在列盍眶中.4 懸主疾止服務(wù)*則退出程睜碁他事杵眾盟;性按“捲收拶鈕Z自齊客戶(hù)曜劃可以

10、嫂停止揍收平捷超終止與肢夯器端北間的袞件件滋 在文件開(kāi)始播收后,點(diǎn)擊“停止播收"哽迅也線(xiàn)lz與脈務(wù)誥端之閭的又件傳送,異常事件冷;1.現(xiàn)示錯(cuò)溟信懇.文件傳遙那二功能實(shí)現(xiàn)及主要代碼服務(wù)器端啟動(dòng)服務(wù),端口號(hào)為8888客戶(hù)端連接服務(wù),服務(wù)器的ip地址為連接成功添加用戶(hù)用戶(hù)驗(yàn)證上傳文件2.txt,上傳到C盤(pán)刷新服務(wù)器,c盤(pán)中有2.txt,上傳成功a iDwT*,*占 TSLOGaG14/5i/5 22=062011/4/d llrOlSW3EIA#罷15014/5/19 1 空押0圧* »mpp2QU/1/17 金295014/4/8 13=1*計(jì)初2014/5/5 16=55益彌

11、鬆(C:|J !=2O12/1J/2 L3<)7-下BO)2014/5/211*12丄河.1.苫空土曲 AJPC2D14W? 2LS018 7 K.B 亠 |添加文件下載文件文件下載到E盤(pán)lit luxuryrogrjim Fi|#(20M/2Z25 2LOB衣件夾計(jì)2Olfl/lZ1012 4S2013/11/7520J2/L1/30 丄毀注2014/J/151351找圭至略瞎2沽忻2OU/4/6 21W33.a T& 4S?培將戸詮計(jì)2014/4/2& 2tt47左件耒軒X)l3/Vll 17;?0Jll dtiKtlfl2O13/W/9 15:50新譽(yù)H心|0>

12、;14/5/211427_ HP V220W (Jr)三實(shí)驗(yàn)總結(jié)通過(guò)這次實(shí)驗(yàn),我很好的了解到了文件傳輸?shù)牧鞒?,了解到文件傳輸協(xié)議使 得主機(jī)間可以共享文件。FTP使用TCP生成一個(gè)虛擬連接用于控制信息,然后 再生成一個(gè)單獨(dú)的TCP連接用于數(shù)據(jù)傳輸??刂七B接使用類(lèi)似TELNET協(xié)議在主 機(jī)間交換命令和消息。文件傳輸協(xié)議是TCP/IP網(wǎng)絡(luò)上兩臺(tái)計(jì)算機(jī)傳送文件的協(xié)議,F(xiàn)TP是在TCP/IP網(wǎng)絡(luò)和INTERNE上最早使用的協(xié)議之一,它屬于網(wǎng)絡(luò)協(xié)議 組的應(yīng)用層。FTP客戶(hù)機(jī)可以給服務(wù)器發(fā)出命令來(lái)下載文件,上傳文件,創(chuàng)建或 改變服務(wù)器上的目錄。對(duì)套接字的使用和通信模型通信機(jī)制有了進(jìn)一步了解,也 熟練的掌握了

13、如何選擇通信模型。對(duì)各個(gè)函數(shù)的使用也有了進(jìn)一步了解。四附錄代碼:服務(wù)器初始化套接字BOOL C()if(m_sock = INVALID_SOCKET)m_sock = socket(AF_INET,SOCK_STREAM ,0);if(INVALID_SOCKET = m_sock)MessageBox("創(chuàng)建套接字失??!");return FALSE;CStri ng sPort;GetDlgltem(IDC_EDIT_PORT)->GetWi ndowText(sPort);MessageBox("開(kāi)啟的端口 :"+sPort);int n

14、Port = atoi(sPort);if(nPort < 1 | nPort > 65535)MessageBox(" 端口號(hào)錯(cuò)誤! "); return FALSE;SOCKADDR_IN srvAddr; srvAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); srvAddr.sin_family = AF_INET;srvAddr.sin_port = htons(nPort); if(bind(m_sock,(SOCKADDR*)&srvAddr,sizeof(SOCKADDR)= SOCKET_ER

15、ROR) closesocket(m_sock);MessageBox(" 綁定套接字失敗 !");return FALSE;return TRUE;int count = 0;CString str10;使用異步選擇模型HCURSOR C()return (HCURSOR) m_hIcon;/ 啟動(dòng)服務(wù) /void C()/ 進(jìn)入監(jiān)聽(tīng)狀態(tài) InitSocket();/ 設(shè)置 socket 為窗口通知消息類(lèi)型/ 進(jìn)入監(jiān)聽(tīng)模式int m_nClient = listen(m_sock,5); if(m_nClient != 0)MessageBox("Listen

16、error!"); closesocket(m_sock); return ;/ MessageBox("Listen success!");II注冊(cè)網(wǎng)絡(luò)注冊(cè)網(wǎng)絡(luò)異步事件,m_hWnd為應(yīng)用程序的主對(duì)話(huà)框或主窗口的句柄if(:WSAAsyncSelect(m_sock, m_hWnd, WM_SOCKET,FD_ACCEPT|FD_CLOSE|FD_READ|FD_WRITE)=SOCKET_ERROR) MessageBox("WSAAsyncSelect fail!");else MessageBox("WSAAsyncSelec

17、t success!"); 客戶(hù)端 連接服務(wù)void C()II 先獲得 IP 控件的值BYTE nField0,nField1,nField2,nField3; m_IP.GetAddress(nField0, nField1,nField2, nField3); char buff20;wsprintf(buff,"%d.%d.%d.%d",nField0,nField1,nField2,nField3); MessageBox(buff);II 獲取端口號(hào)的值int port = atoi(m_port); m_sock = socket(AF_INET,S

18、OCK_STREAM ,0); if(INVALID_SOCKET = m_sock)IIMessageBox(" 創(chuàng)建套接字失敗 !");return ;II elseIIMessageBox(" 創(chuàng)建套接字成功 !");SOCKADDR_IN srvAddr;srvAddr.sin_addr.S_un.S_addr = inet_addr(buff); srvAddr.sin_family = AF_INET;srvAddr.sin_port = htons(port);II srvAddr.sin_port = htons(8888); if(:c

19、onnect(m_sock, (sockaddr*)&srvAddr, sizeof(srvAddr) = -1) MessageBox(" 連接失敗 ");return ;else MessageBox(" 連接服務(wù)器成功 ");UpdateList(); 上傳文件/上傳文件到服務(wù)器 /void C()/* if(!UserVerfify()MessageBox(" 該用戶(hù)不存在 "); return ;*/C (TRUE,NULL,NULL);if() = IDCANCEL)return;CString ; /CStrin

20、g ; / int ;文件名 文件路徑文件類(lèi)型= ();C;new(, C );/ 獲取文件的名字,大小,路徑= new();+= "#" /= new();/char *pbuf = new char1024;/pbuf/memset(pbuf,0,1024);char *pbuf = new charMAXSIZE;/pbufmemset(pbuf,0,MAXSIZE);/ char pbuf1024 = 0;/ UINT nBytesRead = new( pbuf, );UINT nBytesRead = new( pbuf, MAXSIZE);為了區(qū)別文件名和傳輸

21、的內(nèi)容存儲(chǔ)文件內(nèi)容存儲(chǔ)文件內(nèi)容/ 用數(shù)字 1 表示上傳文件名的識(shí)別碼 / = "1" + ;CString pbuf1; pbuf1.Format(pbuf); = "1" + + pbuf;/ char* fName1 = (LPSTR)(LPCTSTR);/ strcat(fName1,pbuf);/此語(yǔ)句有問(wèn)題/ MessageBox();/ MessageBox(fName1); new();if(nBytesRead >0)/ if(send(m_sock,fName1,strlen(fName1)+1,0)=SOCKET_ERROR ) if(send(m_sock,()+1,0)=SOCKET_ERROR )return; 下載文件列表 void C(NMHDR* pNMHDR, LRESULT*

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論