




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
網(wǎng)絡(luò)程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱:winsock編程接口實(shí)驗(yàn)實(shí)驗(yàn)類型:設(shè)計(jì)型指導(dǎo)教師:賈浩專業(yè)班級(jí):信安1204姓名:馬燦學(xué)號(hào):20233252電子郵件:實(shí)驗(yàn)地點(diǎn):東6E307實(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é)議按照客戶/效勞器的模式進(jìn)行工作,提供交互式的訪問(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編程接口編寫兩個(gè)程序,分別為客戶程序〔client.c〕和效勞器程序〔server.c〕,利用了已有網(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)鍵詞:SOCKET編程,F(xiàn)TPclient/server程序一.問(wèn)題描述及設(shè)計(jì)思路1.1問(wèn)題描述效勞器端:1.指定一個(gè)目錄作為FTP目錄(之后所有的文件操作均在此目錄下進(jìn)行)2.接收客戶端的命令請(qǐng)求并提供相應(yīng)的效勞。客戶端:完成與FTP用戶的人機(jī)界面,以命令的方式向效勞器請(qǐng)求效勞,主要的命令有:1.CONNECTIP地址端口號(hào)2.指定FTP效勞器的IP地址和端口號(hào),連接到效勞器。響應(yīng):連接成功/失敗。3.LOGIN用戶名4.用戶登錄(假設(shè)在效勞器端有用戶管理功能)5.響應(yīng):假設(shè)用戶不存在,提示“無(wú)此用戶〞;假設(shè)用戶存在,提示“密碼:〞;用戶輸入密碼后,假設(shè)正確提示“登錄成功〞;假設(shè)不成功,提示“密碼錯(cuò)誤〞。6.3.DIR7.顯示FTP效勞器的FTP目錄的文件列表(假設(shè)無(wú)子目錄)8.響應(yīng):目錄列表(只要文件名即可)。9.4.GET文件名10.將FTP目錄下的文件下載到本地,支持?jǐn)帱c(diǎn)續(xù)傳11.響應(yīng):傳送成功/失敗/無(wú)此文件。12.5.PUT文件名13.將本地文件上傳到FTP目錄,支持?jǐn)帱c(diǎn)續(xù)傳14.響應(yīng):傳送成功/失敗/無(wú)此文件。15.6.HELP(客戶端和效勞器端均有該功能)16.實(shí)驗(yàn)環(huán)境本次實(shí)驗(yàn)采用MFC工程工程采用MFC對(duì)話框界面工程名稱為MyServer和FTPSOCKET。17.詳細(xì)設(shè)計(jì)過(guò)程1.2設(shè)計(jì)思路1.FTP協(xié)議根底FTP是TCP/IP協(xié)議組中的協(xié)議之一,該協(xié)議是Internet文件傳送的根底,它由一系列規(guī)格說(shuō)明文檔組成。目標(biāo)是提高文件的共享性,提供非直接使用遠(yuǎn)程計(jì)算機(jī),使存儲(chǔ)介質(zhì)對(duì)用戶透明和可靠高效地傳送數(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í)候主要可以分為兩個(gè)局部。一個(gè)局部是用于傳送控制信息,例如發(fā)送文件的請(qǐng)求文件的名稱、大小等。采用MFC所提供的CSocket類的串行化技術(shù)來(lái)實(shí)現(xiàn),而另一個(gè)局部就是文件的傳輸局部。對(duì)于文件的傳輸,由于數(shù)據(jù)量相對(duì)來(lái)說(shuō)比擬大,使用兩個(gè)線程。一個(gè)用于發(fā)送,一個(gè)用于接收。這兩個(gè)局部在具體實(shí)現(xiàn)的時(shí)候分別建立有自己的套接字。FTP編程根底3.FTP傳輸原理FTP協(xié)議使用兩條單獨(dú)的TCP連接一條專用于發(fā)送FTP命令另一條那么專用于傳遞數(shù)據(jù)。初始建立連接時(shí)效勞器在21號(hào)端口上接收來(lái)自客戶端的命令連接。當(dāng)需要傳送數(shù)據(jù)時(shí)文件列表、文件數(shù)據(jù)等客戶端向效勞器發(fā)出Port命令并進(jìn)入監(jiān)聽(tīng)狀態(tài)等待來(lái)自效勞器的數(shù)據(jù)連接請(qǐng)求??傮w功能模塊圖效勞器端功能說(shuō)明:線程控制:線程類別:選擇線程類別,單線程或多線程傳送文件線程數(shù)設(shè)置:假設(shè)選擇多線程,可自行設(shè)置線程數(shù)目,假設(shè)選擇單線程,那么默認(rèn)線程數(shù)目為1②啟動(dòng)效勞器:設(shè)置好線程控制后,點(diǎn)擊“啟動(dòng)〞按鈕啟動(dòng)效勞器端③選取文件:選擇要發(fā)送給客戶端的文件④發(fā)送文件:獲取要發(fā)送文件屬性:獲取到要傳送給客戶端的文件的根本屬性,包括:文件名,大小(B),已發(fā)送多少(B),文件路徑發(fā)送進(jìn)度顯示:顯示給客戶端發(fā)送文件的進(jìn)度⑤ChatWithServer:?jiǎn)?dòng)采用UDP協(xié)議的簡(jiǎn)單聊天系統(tǒng),用來(lái)與客戶端進(jìn)行通訊(客戶端和效勞器端都得啟動(dòng),否那么無(wú)法收到)⑥Help:顯示效勞器端使用說(shuō)明客戶端功能說(shuō)明:握手效勞器:輸入效勞器端IP地址,點(diǎn)擊“握手效勞器〞按鈕,獲取效勞器端啟動(dòng)的線程數(shù)②連接效勞器:與效勞器進(jìn)行連接③接收文件:獲取接收文件屬性:獲取到要接收的效勞器端傳來(lái)的文件的根本屬性,包括:文件名,大小(B),已接收多少(B),文件存儲(chǔ)路徑接收進(jìn)度顯示:顯示已接收文件的進(jìn)度④ChatWithServer:?jiǎn)?dòng)采用UDP協(xié)議的簡(jiǎn)單聊天系統(tǒng),用來(lái)與客戶端進(jìn)行通訊(客戶端和效勞器端都得啟動(dòng),否那么無(wú)法收到)⑤獲取IP地址:獲取本機(jī)的主機(jī)名及IP地址⑥HELP:顯示客戶端使用說(shuō)明2、系統(tǒng)結(jié)構(gòu)3、主要功能流程圖(1)文件傳輸流程圖2、用例描述(1)文件傳送用例描述二.功能實(shí)現(xiàn)及主要代碼效勞器端啟動(dòng)效勞,端口號(hào)為8888連接成功添加用戶用戶驗(yàn)證上傳文件2.txt,上傳到C盤刷新效勞器,c盤中有2.txt,上傳成功添加文件下載文件文件下載到E盤三實(shí)驗(yàn)總結(jié)通過(guò)這次實(shí)驗(yàn),我很好的了解到了文件傳輸?shù)牧鞒?,了解到文件傳輸協(xié)議使得主機(jī)間可以共享文件。FTP使用TCP生成一個(gè)虛擬連接用于控制信息,然后再生成一個(gè)單獨(dú)的TCP連接用于數(shù)據(jù)傳輸。控制連接使用類似TELNET協(xié)議在主機(jī)間交換命令和消息。文件傳輸協(xié)議是TCP/IP網(wǎng)絡(luò)上兩臺(tái)計(jì)算機(jī)傳送文件的協(xié)議,F(xiàn)TP是在TCP/IP網(wǎng)絡(luò)和INTERNET上最早使用的協(xié)議之一,它屬于網(wǎng)絡(luò)協(xié)議組的應(yīng)用層。FTP客戶機(jī)可以給效勞器發(fā)出命令來(lái)下載文件,上傳文件,創(chuàng)立或改變效勞器上的目錄。對(duì)套接字的使用和通信模型通信機(jī)制有了進(jìn)一步了解,也熟練的掌握了如何選擇通信模型。對(duì)各個(gè)函數(shù)的使用也有了進(jìn)一步了解。四附錄代碼:效勞器初始化套接字BOOLCFTPServerDlg::InitSocket(){ if(m_sock==INVALID_SOCKET) { m_sock=socket(AF_INET,SOCK_STREAM,0); } if(INVALID_SOCKET==m_sock) { MessageBox("創(chuàng)立套接字失敗!"); returnFALSE; } CStringsPort; GetDlgItem(IDC_EDIT_PORT)->GetWindowText(sPort); MessageBox("開(kāi)啟的端口:"+sPort); intnPort=atoi(sPort); if(nPort<1||nPort>65535) { MessageBox("端口號(hào)錯(cuò)誤!"); returnFALSE; } SOCKADDR_INsrvAddr; 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_ERROR) { closesocket(m_sock); MessageBox("綁定套接字失敗!"); returnFALSE; } returnTRUE;}FileInfofile[10];intcount=0;CStringstr[10];使用異步選擇模型HCURSORCFTPServerDlg::OnQueryDragIcon(){ return(HCURSOR)m_hIcon;}//-----------------------------啟動(dòng)效勞----------------------//voidCFTPServerDlg::OnStart(){ //進(jìn)入監(jiān)聽(tīng)狀態(tài) InitSocket(); //設(shè)置socket為窗口通知消息類型 //進(jìn)入監(jiān)聽(tīng)模式 intm_nClient=listen(m_sock,5); if(m_nClient!=0) { MessageBox("Listenerror!"); closesocket(m_sock); return; } // MessageBox("Listensuccess!"); //注冊(cè)網(wǎng)絡(luò)注冊(cè)網(wǎng)絡(luò)異步事件,m_hWnd為應(yīng)用程序的主對(duì)話框或主窗口的句柄 if(::WSAAsyncSelect(m_sock,m_hWnd,WM_SOCKET, FD_ACCEPT|FD_CLOSE|FD_READ|FD_WRITE)==SOCKET_ERROR) { MessageBox("WSAAsyncSelectfail!"); } else { MessageBox("WSAAsyncSelectsuccess!"); }客戶端連接效勞voidCFTPClientDlg::OnConnect(){//先獲得IP控件的值BYTEnField0,nField1,nField2,nField3; m_IP.GetAddress(nField0,nField1,nField2,nField3); charbuff[20]; wsprintf(buff,"%d.%d.%d.%d",nField0,nField1,nField2,nField3); MessageBox(buff); //獲取端口號(hào)的值 intport=atoi(m_port); m_sock=socket(AF_INET,SOCK_STREAM,0); if(INVALID_SOCKET==m_sock) { // MessageBox("創(chuàng)立套接字失敗!"); return; } // else // MessageBox("創(chuàng)立套接字成功!"); SOCKADDR_INsrvAddr; srvAddr.sin_addr.S_un.S_addr=inet_addr(buff); srvAddr.sin_family=AF_INET;srvAddr.sin_port=htons(port); // srvAddr.sin_port=htons(8888); if(::connect(m_sock,(sockaddr*)&srvAddr,sizeof(srvAddr))==-1) { MessageBox("連接失敗"); return; } else MessageBox("連接效勞器成功"); UpdateList();}上傳文件//-----------------------上傳文件到效勞器--------------------------//voidCFTPClientDlg::OnPutFile(){/* if(!UserVerfify()) { MessageBox("該用戶不存在"); return; }*/ CFileDialogfileDlg(TRUE,NULL,NULL);if(fileDlg.DoModal()==IDCANCEL) return; CStringfileName,filePath;//文件名文件路徑 CStringfileType;//文件類型intfileLength; filePath=fileDlg.GetPathName(); CFilenewFile;newFile.Open(filePath,CFile::modeRead|CFile::modeReadWrite); //獲取文件的名字,大小,路徑 fileName=newFile.GetFileName(); fileName+="#";//為了區(qū)別文件名和傳輸?shù)膬?nèi)容 fileLength=newFile.GetLength(); // char*pbuf=newchar[1024];//pbuf存儲(chǔ)文件內(nèi)容// memset(pbuf,0,1024); char*pbuf=newchar[MAXSIZE];//pbuf存儲(chǔ)文件內(nèi)容 memset(pbuf,0,MAXSIZE);// charpbuf[1024]={0}; //UINTnBytesRead=newFile.Read(pbuf,fileLength); UINTnBytesRead=newFile.Read(pbuf,MAXSIZE); //-------------用數(shù)字1表示上傳文件名的識(shí)別碼---------//// fileName="1"+fileName; CStringpbuf1; pbuf1.Format(pbuf); fileName="1"+fileName+pbuf;//char*fName1=(LPSTR)(LPCTSTR)fileName;// strcat(fName1,pbuf);///////////////////////此語(yǔ)句有問(wèn)題/////////////////////////////MessageBox(fileName);// MessageBox(fName1); newFile.Close(); if(nBytesRead>0) { // if(send(m_sock,fName1,strlen(fName1)+1,0)==SOCKET_ERROR)if(send(m_sock,fileName,strlen(fileName)+1,0)==SOCKET_ERROR) return; }}下載文件列表 voidCFTPClientDlg::OnDblclkFileList(NMHDR*pNMHDR,LRESULT*pResult) { //TODO:Addyourcontrolnotificationhandlercodehere
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 護(hù)理人員的藥學(xué)知識(shí)加強(qiáng)練習(xí)試題及答案
- 2025年醫(yī)學(xué)診斷技術(shù)試題及答案
- 唐宋八大家之一蘇軾蘇東坡定風(fēng)波動(dòng)態(tài)
- 行政法學(xué)專業(yè)發(fā)展的關(guān)鍵試題及答案
- 2025年執(zhí)業(yè)藥師高分策略試題及答案
- 護(hù)理學(xué)創(chuàng)新能力培養(yǎng)與2025年試題及答案
- 2025年衛(wèi)生資格考試的關(guān)鍵環(huán)節(jié)與試題及答案
- 提升衛(wèi)生資格考試信心的復(fù)習(xí)策略試題與答案
- 主管護(hù)師考試的獨(dú)特試題及答案詳解
- 2025行政管理語(yǔ)文試題與答案指南
- 項(xiàng)目部臨時(shí)動(dòng)火作業(yè)審批表
- 飲料生產(chǎn)公司應(yīng)急預(yù)案匯編參考范本
- 高效水泥助磨劑PPT課件(PPT 66頁(yè))
- 生物防治第三講
- 旁站監(jiān)理實(shí)施細(xì)則(完整版)
- 學(xué)業(yè)水平考試復(fù)習(xí)高中語(yǔ)文文言文課本翻譯
- 蘇教版二年級(jí)(下冊(cè))科學(xué)全冊(cè)單元測(cè)試卷含期中期末(有答案)
- 常用原料凈料率參照表
- 高低溫試驗(yàn)報(bào)告
- 第一章 混凝土拌合站組織機(jī)構(gòu)框圖及崗位職責(zé)
- 指南預(yù)應(yīng)力簡(jiǎn)支t形梁橋
評(píng)論
0/150
提交評(píng)論