




已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
精品文檔網(wǎng)絡程序設計實驗報告 實驗名稱: winsock 編程接口實驗 實驗類型: 設計型 指導教師: 賈浩 專業(yè)班級: 信安1204 姓 名: 馬燦 學 號: 20123252 電子郵件: 實驗地點: 東6 E307 實 驗 日 期: 實驗成績:_實驗七 網(wǎng)絡程序設計綜合實驗摘要:本課程設計包含了文件傳輸協(xié)議的簡單設計與實現(xiàn)。文件傳送協(xié)議是一種最基本的應用層協(xié)議按照客戶/服務器的模式進行工作,提供交互式的訪問,是INTERNET使用最廣泛的協(xié)議之一。文件傳輸協(xié)議的簡單設計與實現(xiàn)建立在計算機網(wǎng)絡實驗環(huán)境TCP/IP網(wǎng)絡體系結(jié)構(gòu)之上,使用socket編程接口編寫兩個程序,分別為客戶程序(client.c)和服務器程序(server.c),利用了已有網(wǎng)絡環(huán)境設計并實現(xiàn)簡單應用層協(xié)議。本設計包括了具體設計任務,基本思路及所涉及的相關理論,設計流程圖,調(diào)試過程中出現(xiàn)的問題及相應解決辦法,實驗運行結(jié)果,核心程序,個人體會及建議等。關鍵詞:SOCKET編程,F(xiàn)TPclient/server程序一問題描述及設計思路 1.1 問題描述 服務器端: 1指定一個目錄作為FTP目錄(之后所有的文件操作均在此目錄下進行) 2接收客戶端的命令請求并提供相應的服務。 客戶端:完成與FTP用戶的人機界面,以命令的方式向服務器請求服務,主要的命令有: 1CONNECTIP地址端口號 2 指定FTP服務器的IP地址和端口號,連接到服務器。 響應:連接成功/失敗。 3LOGIN用戶名 4 用戶登錄(假設在服務器端有用戶管理功能) 5響應:若用戶不存在,提示“無此用戶”;若用戶存在,提示“密碼:”; 用戶輸入密碼后,若正確提示“登錄成功”;若不成功,提示“密碼錯誤”。63DIR 7顯示FTP服務器的FTP目錄的文件列表(假設無子目錄) 8響應:目錄列表(只要文件名即可)。 94GET文件名 10 將FTP目錄下的文件下載到本地,支持斷點續(xù)傳 11 響應:傳送成功/失敗/無此文件。 12 5PUT文件名 13 將本地文件上傳到FTP目錄,支持斷點續(xù)傳 14 響應:傳送成功/失敗/無此文件。 15 6HELP(客戶端和服務器端均有該功能) 16實驗環(huán)境 本次實驗采用MFC工程工程采用MFC對話框界面工程名稱為MyServer和FTPSOCKET。 17 詳細設計過程1.2 設計思路 1. FTP協(xié)議基礎 FTP 是 TCP/IP 協(xié)議組中的協(xié)議之一,該協(xié)議是Internet文件傳送的基礎,它由一系列規(guī)格說明文檔組成。目標是提高文件的共享性,提供非直接使用遠程計算機,使存儲介質(zhì)對用戶透明和可靠高效地傳送數(shù)據(jù)。簡單的說,F(xiàn)TP就是完成兩臺計算機之間的拷貝,從遠程計算機拷貝文件至自己的計算機上或從自己計算機中拷貝至遠程計算機上。在TCP/IP協(xié)議中FTP標準命令TCP端口號為21,Port方式數(shù)據(jù)端口為20。2. 網(wǎng)絡文件傳輸原理 在通信的時候主要可以分為兩個部分。一個部分是用于傳送控制信息,例如發(fā)送文件的請求文件的名稱、大小等。采用MFC所提供的CSocket類的串行化技術來實現(xiàn),而另一個部分就是文件的傳輸部分。對于文件的傳輸,由于數(shù)據(jù)量相對來說比較大,使用兩個線程。一個用于發(fā)送,一個用于接收。這兩個部分在具體實現(xiàn)的時候分別建立有自己的套接字。FTP編程基礎 3. FTP傳輸原理 FTP協(xié)議使用兩條單獨的TCP連接一條專用于發(fā)送FTP命令另一條則專用于傳遞數(shù)據(jù)。初始建立連接時服務器在21號端口上接收來自客戶端的命令連接。當需要傳送數(shù)據(jù)時文件列表、文件數(shù)據(jù)等客戶端向服務器發(fā)出Port命令并進入監(jiān)聽狀態(tài)等待來自服務器的數(shù)據(jù)連接請求??傮w功能模塊圖 服務器端 功能說明: 線程控制:線程類別:選擇線程類別,單線程或多線程傳送文件 線程數(shù)設置:若選擇多線程,可自行設置線程數(shù)目, 若選擇單線程,則默認線程數(shù)目為1 啟動服務器:設置好線程控制后,點擊“啟動”按鈕啟動服務器端 選取文件:選擇要發(fā)送給客戶端的文件 發(fā)送文件:獲取要發(fā)送文件屬性:獲取到要傳送給客戶端的文件的基本屬性,包括:文件名,大小(B),已發(fā)送多少(B),文件路徑發(fā)送進度顯示:顯示給客戶端發(fā)送文件的進度 ChatWithServer:啟動采用UDP協(xié)議的簡單聊天系統(tǒng),用來與客戶端進行通訊(客戶端和服務器端都得啟動,否則無法收到) Help:顯示服務器端使用說明客戶端 功能說明: 握手服務器:輸入服務器端IP地址,點擊“握手服務器”按鈕,獲取服務器端啟動的線程數(shù) 連接服務器:與服務器進行連接 接收文件:獲取接收文件屬性:獲取到要接收的服務器端傳來的文件的基本屬性,包括:文件名,大小(B),已接收多少(B),文件存儲路徑接收進度顯示:顯示已接收文件的進度 ChatWithServer:啟動采用UDP協(xié)議的簡單聊天系統(tǒng),用來與客戶端進行通訊(客戶端和服務器端都得啟動,否則無法收到) 獲取IP地址:獲取本機的主機名及IP地址 HELP:顯示客戶端使用說明2、系統(tǒng)結(jié)構(gòu) 3、主要功能流程圖 (1)文件傳輸流程圖 2、用例描述(1)文件傳送用例描述 二功能實現(xiàn)及主要代碼服務器端啟動服務,端口號為8888客戶端連接服務,服務器的ip地址為15連接成功添加用戶用戶驗證上傳文件2.txt,上傳到C盤刷新服務器,c盤中有2.txt,上傳成功添加文件下載文件文件下載到E盤三 實驗總結(jié) 通過這次實驗,我很好的了解到了文件傳輸?shù)牧鞒蹋私獾轿募鬏攨f(xié)議使得主機間可以共享文件。 FTP 使用TCP生成一個虛擬連接用于控制信息,然后再生成一個單獨的 TCP 連接用于數(shù)據(jù)傳輸。控制連接使用類似TELNET協(xié)議在主機間交換命令和消息。文件傳輸協(xié)議是TCP/IP網(wǎng)絡上兩臺計算機傳送文件的協(xié)議,F(xiàn)TP是在TCP/IP網(wǎng)絡和INTERNET上最早使用的協(xié)議之一,它屬于網(wǎng)絡協(xié)議組的應用層。FTP客戶機可以給服務器發(fā)出命令來下載文件,上傳文件,創(chuàng)建或改變服務器上的目錄。對套接字的使用和通信模型通信機制有了進一步了解,也熟練的掌握了如何選擇通信模型。對各個函數(shù)的使用也有了進一步了解。四 附錄代碼:服務器 初始化套接字BOOL CFTPServerDlg:InitSocket()if(m_sock = INVALID_SOCKET)m_sock = socket(AF_INET,SOCK_STREAM ,0);if(INVALID_SOCKET = m_sock)MessageBox(創(chuàng)建套接字失敗!);return FALSE;CString sPort;GetDlgItem(IDC_EDIT_PORT)-GetWindowText(sPort);MessageBox(開啟的端口:+sPort);int nPort = atoi(sPort);if(nPort 65535)MessageBox(端口號錯誤!);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_ERROR)closesocket(m_sock);MessageBox(綁定套接字失敗!);return FALSE;return TRUE;FileInfo file10;int count = 0;CString str10;使用異步選擇模型HCURSOR CFTPServerDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;/-啟動服務-/void CFTPServerDlg:OnStart() /進入監(jiān)聽狀態(tài)InitSocket(); / 設置socket為窗口通知消息類型/ 進入監(jiān)聽模式int m_nClient = listen(m_sock,5);if(m_nClient != 0)MessageBox(Listen error!);closesocket(m_sock);return ;/MessageBox(Listen success!);/注冊網(wǎng)絡注冊網(wǎng)絡異步事件,m_hWnd為應用程序的主對話框或主窗口的句柄if(:WSAAsyncSelect(m_sock, m_hWnd, WM_SOCKET, FD_ACCEPT|FD_CLOSE|FD_READ|FD_WRITE)=SOCKET_ERROR)MessageBox(WSAAsyncSelect fail!);elseMessageBox(WSAAsyncSelect success!);客戶端 連接服務void CFTPClientDlg:OnConnect() /先獲得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);/獲取端口號的值int port = 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_IN srvAddr;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 ;elseMessageBox(連接服務器成功);UpdateList();上傳文件/-上傳文件到服務器-/void CFTPClientDlg:OnPutFile() /*if(!UserVerfify()MessageBox(該用戶不存在);return ;*/CFileDialog fileDlg(TRUE,NULL,NULL); if(fileDlg.DoModal() = IDCANCEL)return;CString fileName,filePath; /文件名 文件路徑CString fileType; /文件類型 int fileLength;filePath = fileDlg.GetPathName();CFile newFile; newFile.Open(filePath, CFile:modeRead|CFile:modeReadWrite ); /獲取文件的名字,大小,路徑fileName = newFile.GetFileName();fileName += #; /為了區(qū)別文件名和傳輸?shù)膬?nèi)容fileLength = newFile.GetLength();/char *pbuf = new char1024; /pbuf存儲文件內(nèi)容/memset(pbuf,0,1024);char *pbuf = new charMAXSIZE; /pbuf存儲文件內(nèi)容memset(pbuf,0,MAXSIZE);/char pbuf1024 = 0;/ UINT nBytesRead = newFile.Read( pbuf, fileLength);UINT nBytesRead = newFile.Read( pbuf, MAXSIZE);/-用數(shù)字1表示上傳文件名的識別碼-/fileName = 1 + fileName;CString pbuf1;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;下載文件列表void CFTPClientDlg:OnDblclkFileList(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code hereint m_count = m_fileList.GetItemCount();if(m_count GetWindowText(user);user = 4 + user; char
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國自動香水機行業(yè)市場深度研究及發(fā)展前景投資可行性分析報告
- 2025至2030中國自動細胞清洗機行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國自動柜員機行業(yè)市場深度研究及發(fā)展前景投資可行性分析報告
- 2025至2030中國膝關節(jié)重建裝置行業(yè)市場深度研究及發(fā)展前景投資可行性分析報告
- 2025至2030中國脫硫醇催化劑行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國脊柱非融合技術行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 初中生化學元素基礎講座課件
- 2025至2030中國腫瘤壞死因子受體超家族成員1A行業(yè)市場占有率及投資前景評估規(guī)劃報告
- 2025至2030中國聯(lián)合辦公行業(yè)發(fā)展分析及產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國翅片密封袋行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 汽車產(chǎn)業(yè)鏈協(xié)同發(fā)展-洞察闡釋
- 滴灌帶造顆粒合同協(xié)議
- 學??倓蘸笄诠ぷ骺偨Y(jié)模版
- 《蛇咬傷應急處理》課件
- 2025年錨栓市場發(fā)展現(xiàn)狀
- 養(yǎng)豬場建設項目可行性研究報告(模板范文)
- 2025年四級中式烹調(diào)師(中級)職業(yè)技能鑒定參考試題庫(含答案)
- 夜間作業(yè)安全培訓培訓資料
- 中藥知識講解課件
- 施工資源需求計劃與調(diào)配策略
- 預制箱梁首件工程施工總結(jié)
評論
0/150
提交評論