版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
網(wǎng)絡(luò)程序設(shè)計(jì)實(shí)驗(yàn)報告 實(shí)驗(yàn)名稱:winsock編程接口實(shí)驗(yàn)實(shí)驗(yàn)類型:設(shè)計(jì)型指導(dǎo)教師:賈浩專業(yè)班級:信安1204姓名:馬燦學(xué)號:20123252電子郵件:實(shí)驗(yàn)地點(diǎn):東6E307實(shí)驗(yàn)日期:
實(shí)驗(yàn)成績:__________________________
實(shí)驗(yàn)七網(wǎng)絡(luò)程序設(shè)計(jì)綜合實(shí)驗(yàn)摘要:本課程設(shè)計(jì)包含了文件傳輸協(xié)議的簡單設(shè)計(jì)與實(shí)現(xiàn)。文件傳送協(xié)議是一種最基本的應(yīng)用層協(xié)議按照客戶/服務(wù)器的模式進(jìn)行工作,提供交互式的訪問,是INTERNET使用最廣泛的協(xié)議之一。文件傳輸協(xié)議的簡單設(shè)計(jì)與實(shí)現(xiàn)建立在計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)環(huán)境TCP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)之上,使用socket編程接口編寫兩個程序,分別為客戶程序(client.c)和服務(wù)器程序(server.c),利用了已有網(wǎng)絡(luò)環(huán)境設(shè)計(jì)并實(shí)現(xiàn)簡單應(yīng)用層協(xié)議。本設(shè)計(jì)包括了具體設(shè)計(jì)任務(wù),基本思路及所涉及的相關(guān)理論,設(shè)計(jì)流程圖,調(diào)試過程中出現(xiàn)的問題及相應(yīng)解決辦法,實(shí)驗(yàn)運(yùn)行結(jié)果,核心程序,個人體會及建議等。關(guān)鍵詞:SOCKET編程,F(xiàn)TPclient/server程序一.問題描述及設(shè)計(jì)思路1.1問題描述服務(wù)器端:1.指定一個目錄作為FTP目錄(之后所有的文件操作均在此目錄下進(jìn)行)2.接收客戶端的命令請求并提供相應(yīng)的服務(wù)??蛻舳耍和瓿膳cFTP用戶的人機(jī)界面,以命令的方式向服務(wù)器請求服務(wù),主要的命令有:1.CONNECTIP地址端口號2.指定FTP服務(wù)器的IP地址和端口號,連接到服務(wù)器。響應(yīng):連接成功/失敗。3.LOGIN用戶名4.用戶登錄(假設(shè)在服務(wù)器端有用戶管理功能)5.響應(yīng):若用戶不存在,提示“無此用戶”;若用戶存在,提示“密碼:”;用戶輸入密碼后,若正確提示“登錄成功”;若不成功,提示“密碼錯誤”。6.3.DIR7.顯示FTP服務(wù)器的FTP目錄的文件列表(假設(shè)無子目錄)8.響應(yīng):目錄列表(只要文件名即可)。9.4.GET文件名10.將FTP目錄下的文件下載到本地,支持?jǐn)帱c(diǎn)續(xù)傳11.響應(yīng):傳送成功/失敗/無此文件。12.5.PUT文件名13.將本地文件上傳到FTP目錄,支持?jǐn)帱c(diǎn)續(xù)傳14.響應(yīng):傳送成功/失敗/無此文件。15.6.HELP(客戶端和服務(wù)器端均有該功能)16.實(shí)驗(yàn)環(huán)境本次實(shí)驗(yàn)采用MFC工程工程采用MFC對話框界面工程名稱為MyServer和FTPSOCKET。17.詳細(xì)設(shè)計(jì)過程1.2設(shè)計(jì)思路1.FTP協(xié)議基礎(chǔ)3、主要功能流程圖(1)文件傳輸流程圖2、用例描述(1)文件傳送用例描述二.功能實(shí)現(xiàn)及主要代碼服務(wù)器端啟動服務(wù),端口號為8888客戶端連接服務(wù),服務(wù)器的ip地址為15連接成功添加用戶用戶驗(yàn)證上傳文件2.txt,上傳到C盤刷新服務(wù)器,c盤中有2.txt,上傳成功添加文件下載文件文件下載到E盤三實(shí)驗(yàn)總結(jié)通過這次實(shí)驗(yàn),我很好的了解到了文件傳輸?shù)牧鞒蹋私獾轿募鬏攨f(xié)議使得主機(jī)間可以共享文件。FTP使用TCP生成一個虛擬連接用于控制信息,然后再生成一個單獨(dú)的TCP連接用于數(shù)據(jù)傳輸。控制連接使用類似TELNET協(xié)議在主機(jī)間交換命令和消息。文件傳輸協(xié)議是TCP/IP網(wǎng)絡(luò)上兩臺計(jì)算機(jī)傳送文件的協(xié)議,F(xiàn)TP是在TCP/IP網(wǎng)絡(luò)和INTERNET上最早使用的協(xié)議之一,它屬于網(wǎng)絡(luò)協(xié)議組的應(yīng)用層。FTP客戶機(jī)可以給服務(wù)器發(fā)出命令來下載文件,上傳文件,創(chuàng)建或改變服務(wù)器上的目錄。對套接字的使用和通信模型通信機(jī)制有了進(jìn)一步了解,也熟練的掌握了如何選擇通信模型。對各個函數(shù)的使用也有了進(jìn)一步了解。四附錄代碼:服務(wù)器初始化套接字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("開啟的端口:"+sPort); intnPort=atoi(sPort); if(nPort<1||nPort>65535) { MessageBox("端口號錯誤!"); 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;}//-----------------------------啟動服務(wù)----------------------//voidCFTPServerDlg::OnStart(){ //進(jìn)入監(jiān)聽狀態(tài) InitSocket(); //設(shè)置socket為窗口通知消息類型 //進(jìn)入監(jiān)聽模式 intm_nClient=listen(m_sock,5); if(m_nClient!=0) { MessageBox("Listenerror!"); closesocket(m_sock); return; } // MessageBox("Listensuccess!"); //注冊網(wǎng)絡(luò)注冊網(wǎng)絡(luò)異步事件,m_hWnd為應(yīng)用程序的主對話框或主窗口的句柄 if(::WSAAsyncSelect(m_sock,m_hWnd,WM_SOCKET, FD_ACCEPT|FD_CLOSE|FD_READ|FD_WRITE)==SOCKET_ERROR) { MessageBox("WSAAsyncSelectfail!"); } else { MessageBox("WSAAsyncSelectsuccess!"); } 客戶端連接服務(wù)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); //獲取端口號的值 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("連接服務(wù)器成功"); UpdateList();}上傳文件//-----------------------上傳文件到服務(wù)器--------------------------//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存儲文件內(nèi)容// memset(pbuf,0,1024); char*pbuf=newchar[MAXSIZE];//pbuf存儲文件內(nèi)容 memset(pbuf,0,MAXSIZE);// charpbuf[1024]={0}; //UINTnBytesRead=newFile.Read(pbuf,fileLength); UINTnBytesRead=newFile.Read(pbuf,MAXSIZE); //-------------用數(shù)字1表示上傳文件名的識別碼---------//// fileName="1"+fileName; CStringpbuf1; pbuf1.Format(pbuf); fileName="1"+fileName+pbuf; //char*fName1=(LPSTR)(LPCTSTR)fileName;// strcat(fName1,pbuf);///////////////////////此語句有問題/////////////////////////////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 intm_count=m_fileList.GetItemCount(); if(m_count<=0) { MessageBox("沒
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《基于Web文本挖掘的我國電子競技人才市場需求研究》
- 2023年湖南安全技術(shù)職業(yè)學(xué)院專職教學(xué)督導(dǎo)員招聘筆試真題
- 2023年北京印刷學(xué)院非事業(yè)編制財務(wù)人員招聘筆試真題
- 工業(yè)區(qū)物業(yè)服務(wù)協(xié)議
- 技術(shù)外包服務(wù)合同衰落
- 家居日用品選購合同
- 機(jī)票招標(biāo)文件發(fā)布時間
- 居間房地產(chǎn)居間居間
- 輕松自駕游方案
- 自愿放棄培訓(xùn)的理由說明
- 全國第三屆職業(yè)技能大賽(數(shù)字孿生應(yīng)用技術(shù))選拔賽理論考試題庫(含答案)
- 應(yīng)用數(shù)理統(tǒng)計(jì)知到智慧樹章節(jié)測試課后答案2024年秋中國農(nóng)業(yè)大學(xué)
- 大國三農(nóng)II-農(nóng)業(yè)科技版智慧樹知到期末考試答案章節(jié)答案2024年中國農(nóng)業(yè)大學(xué)
- JBT 1472-2023 泵用機(jī)械密封 (正式版)
- 二級公立醫(yī)院績效考核三級手術(shù)目錄(2020版)
- 6人小品《沒有學(xué)習(xí)的人不傷心》臺詞完整版
- 部編本小學(xué)五年級上冊語文期末考試(選擇題)專項(xiàng)訓(xùn)練題及答案
- 讀《讓兒童在問題中學(xué)數(shù)學(xué)》有感范文三篇
- 陳述句改成雙重否定句(課堂PPT)
- 人教版六年級數(shù)學(xué)上冊總復(fù)習(xí)教案
- 自閉癥兒童行為檢核表學(xué)前版
評論
0/150
提交評論