基于WINSOCK的FTP客戶端的實(shí)現(xiàn)_第1頁
基于WINSOCK的FTP客戶端的實(shí)現(xiàn)_第2頁
基于WINSOCK的FTP客戶端的實(shí)現(xiàn)_第3頁
基于WINSOCK的FTP客戶端的實(shí)現(xiàn)_第4頁
基于WINSOCK的FTP客戶端的實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、基于Winsock的FTP客戶端的實(shí)現(xiàn)目錄一、 課程設(shè)計(jì)基本要求2l 課程設(shè)計(jì)目的2l 課程設(shè)計(jì)任務(wù)3l 課程設(shè)計(jì)要求3二、 程序簡介3l 開發(fā)環(huán)境3l 程序界面4三、 原理概述5l FTP協(xié)議5l 應(yīng)用WinSock實(shí)現(xiàn)網(wǎng)絡(luò)通信6四、 主要數(shù)據(jù)結(jié)構(gòu)7五、 CFTPClient類8l 控制連接的實(shí)現(xiàn)9l 數(shù)據(jù)連接的實(shí)現(xiàn)11六、 體會(huì)141、 課程設(shè)計(jì)基本要求l 課程設(shè)計(jì)目的1 加深對(duì) TCP/IP協(xié)議的理解。 2 了解 FTP協(xié)議的工作原理。 3 掌握用 MFC編寫FTP協(xié)議的實(shí)現(xiàn)程序。 l 課程設(shè)計(jì)任務(wù)在 Visual C+6.0的環(huán)境下實(shí)現(xiàn) FTP下載工具。l 課程設(shè)計(jì)要求1 了解 FTP

2、協(xié)議的工作原理。(RFC765 , RFC2228, RFC2640, RFC2773) 2 主要是基于 TCP/IP的 Winsock編程,用 Visual C+6.0實(shí)現(xiàn)一個(gè)基于 FTP協(xié)議的 FTP下載工具(客戶端)。 2、 程序簡介l 開發(fā)環(huán)境 操作系統(tǒng):Microsoft Windows XP pro編譯環(huán)境:Microsoft Visual C+ 6.0:PM-1.7GHz內(nèi)存:768MB硬盤:40MB分辨率:32bit 1024×768l 程序界面3、 原理概述l FTP協(xié)議FTP是 Internet上基于TCP/IP協(xié)議傳輸文件的應(yīng)用層協(xié)議。FTP規(guī)定了數(shù)據(jù)包的格式、

3、 數(shù)據(jù)包頭部結(jié)構(gòu)和命令結(jié)構(gòu)等等。FTP應(yīng)用命令行方式傳輸文件。FTP在 RFC959中定義。FTP應(yīng)用 TCP傳輸而不是 UDP。由 FTP提供的文件傳輸是將一個(gè)完整的文件從一個(gè)系統(tǒng)復(fù)制到另一個(gè)系統(tǒng)中。應(yīng)用 FTP首先需要登錄 FTP服務(wù)器 ,或者通過允許匿名FTP來使用 FTP服務(wù)器。FTP最早的設(shè)計(jì)是用于兩臺(tái)不同的主機(jī)即不同的操作系統(tǒng)下 ,不同的文件結(jié)構(gòu) ,不同的字符集。FTP是建立兩個(gè) TCP連接 (見圖) ,一個(gè)用于傳輸數(shù)據(jù) ,另一個(gè)用于傳輸命令。每個(gè) FTP主機(jī)都有一個(gè)“ 協(xié)議解析器 ” ( Pr ot oco1 I nter p reter, PI )模塊,負(fù)責(zé)解釋并執(zhí)行 FTP命

4、令和響應(yīng)。同時(shí) ,每個(gè) FTP主機(jī)還有一個(gè)“FTP數(shù)據(jù)傳送 ” ( FTPData Transfer,D T)模塊 ,負(fù)責(zé)處理數(shù)據(jù)。FTP通過執(zhí)行“Telnet” (虛擬終端 )模塊或通過完全重新實(shí)施 Telnet作為“ 協(xié)議解析器 ”。FTP命令以純文本形式發(fā)送 ,其響應(yīng)同樣也是純文本形式 ,并在三位數(shù)字后跟某些文本。這些數(shù)字可由軟件用來確定下面要采取的步驟。而文本則供用戶閱讀。每一個(gè)命令都會(huì)產(chǎn)生一個(gè)或多個(gè)響應(yīng)。l 應(yīng)用WinSock實(shí)現(xiàn)網(wǎng)絡(luò)通信WinSock是Microsoft等公司聯(lián)合開發(fā)的網(wǎng)絡(luò)編程接口, 其實(shí)是一種進(jìn)程間相互通信的機(jī)制,并將這種進(jìn)程間通信從單機(jī)環(huán)境擴(kuò)展到網(wǎng)絡(luò)環(huán)境, 適合

5、于開發(fā)主機(jī)/客戶機(jī)通信程序。 網(wǎng)絡(luò)通信包括兩臺(tái)主機(jī)或者兩個(gè)進(jìn)程通過網(wǎng)絡(luò)傳遞數(shù)據(jù), 網(wǎng)絡(luò)的每一端稱為一個(gè)端點(diǎn), 而WinSock為網(wǎng)絡(luò)端點(diǎn)的抽象表示。當(dāng)用其編程時(shí),程序在網(wǎng)絡(luò)對(duì)話的每端都需要一個(gè) Socket,兩個(gè)Socket之間可以應(yīng)用面向連接的或者是無連接的網(wǎng)絡(luò)協(xié)議。面向連接的協(xié)議通過互換確認(rèn)信息在連接端口之間建立一條虛電路,它不必關(guān)心網(wǎng)絡(luò)軟件傳送數(shù)據(jù)。因而面向連接的客戶程序不必指定本地協(xié)議端口, 而只需為Socket提供遠(yuǎn)程主機(jī)信息;IP地址和協(xié)議端口,WinSock可自動(dòng)保存本地IP地址和選擇本地端口。面向連接的WinSock客戶機(jī)/服務(wù)器模型,服務(wù)器在沒有請(qǐng)求到達(dá)時(shí),它處于等待狀態(tài)。

6、一旦請(qǐng)求到來,服務(wù)器立即產(chǎn)生一個(gè)子進(jìn)程,然后回到等待狀態(tài),由子進(jìn)程相應(yīng)請(qǐng)求。當(dāng)下一個(gè)請(qǐng)求到達(dá)時(shí),服務(wù)器再產(chǎn)生一個(gè)新進(jìn)程。其中,并發(fā)服務(wù)器成為主服務(wù)器,子進(jìn)程稱為從服務(wù)器。這種主從服務(wù)器的方式巧妙地解決了并發(fā)請(qǐng)求問題。4、 主要數(shù)據(jù)結(jié)構(gòu)CSFTPApp類CWinApp類的派生類,由編譯器自動(dòng)生成,該對(duì)象代表了應(yīng)用進(jìn)程的主線程。CMainFrame類CFrameWnd類的派生類,由編譯器自動(dòng)生成,用于創(chuàng)建應(yīng)用程序的主窗口,它能很好地支持系統(tǒng)菜單和控制條(工具條、狀態(tài)條等)。在編寫文檔/視圖結(jié)構(gòu)的應(yīng)用程序時(shí),它作為主窗口管理視圖和文檔對(duì)象。CSFTPDoc類CDocument類的派生類,由編譯器自動(dòng)

7、生成,它只是提供了一個(gè)框架,為文檔對(duì)象與相關(guān)的其他對(duì)象(視圖、應(yīng)用程序?qū)ο蠹翱蚣艽翱诘龋┻M(jìn)行交互提供了框架。對(duì)CSFTPDoc類的設(shè)計(jì)工作,基本上都是在這個(gè)已有框架的基礎(chǔ)上,添加所需要的功能代碼。 CDFTPView類CListView類的派生類,同樣由編譯器自動(dòng)生成,在本程序中用于顯示FTP服務(wù)器上的文件列表。CAboutDlg類CDialog類的派生類,由編譯器自動(dòng)生成,用于顯示幫助信息。CMessageDlg類CDialog類的派生類,用于顯示從FTP服務(wù)器發(fā)來的響應(yīng)信息。CListItem類用來解析FTP服務(wù)器發(fā)送過來的文件列表信息,將每個(gè)文件的類型、名稱、大小、創(chuàng)建時(shí)間和訪問權(quán)限分別

8、提取出來。CFTPClient類這是實(shí)現(xiàn)FTP協(xié)議的主要部分,也是本文檔要著重解釋的一個(gè)類。5、 CFTPClient類l 控制連接的實(shí)現(xiàn)FTP客戶端與服務(wù)器端建立連接的流程為1. 創(chuàng)建一個(gè)套接字,并且與服務(wù)器建立連接。2. 創(chuàng)建CArchive對(duì)象、CSocketFile對(duì)象和CSocket對(duì)象之間的關(guān)聯(lián)。3. 用于控制的數(shù)據(jù)流連接已經(jīng)建立,可以發(fā)送命令與接收響應(yīng)。4. 依次發(fā)送USER和PASS命令成功登錄服務(wù)器。MFC中提供了一個(gè)網(wǎng)絡(luò)編程模式,可以充分利用CSocket的特性。該模式的基礎(chǔ)是CSocketFile類。使用方法如下:首先,構(gòu)造一個(gè)CSocket對(duì)象;調(diào)用Create函數(shù)創(chuàng)建

9、一個(gè)socket對(duì)象(SOCK_STREAM類型)。接著,如果是客戶程序,調(diào)用Connect連接到遠(yuǎn)地主機(jī);如果是服務(wù)器程序,先調(diào)用Listen監(jiān)聽socket端口,收到連接請(qǐng)求后調(diào)用Accept接收請(qǐng)求。然后,創(chuàng)建一個(gè)和CSocket對(duì)象關(guān)聯(lián)的CSocketFile對(duì)象,創(chuàng)建一個(gè)和CSocketFile對(duì)象關(guān)聯(lián)的CArchive對(duì)象,指定CArchive對(duì)象是用于讀或者寫。如果既要讀又要寫,則創(chuàng)建兩個(gè)CArchive對(duì)象。創(chuàng)建工作完成之后,使用CArchive對(duì)象在客戶和服務(wù)器之間傳送數(shù)據(jù)。使用完畢,銷毀CArchive對(duì)象、CSocketFile對(duì)象、CSocket對(duì)象。BOOL Conn

10、ectServer(CString serverhost,int serverport);首先創(chuàng)建一個(gè)套接字與服務(wù)器建立連接。(代碼如下圖)然后建立CArchive對(duì)象(m_pCtrlOutarch和m_pCtrlInarch)、CSocketFile對(duì)象(m_pCtrlsokfile)和CSocket對(duì)象(m_Ctrlsok)之間的關(guān)聯(lián),用于發(fā)送和接收數(shù)據(jù)。(代碼如下圖)BOOL FTPcommand(CString command);BOOL WriteStr(CString outputstring);int ReadStr();后兩個(gè)方法WriteStr和ReadStr利用已經(jīng)在Con

11、nectServer()中初始化的兩個(gè)CArchive對(duì)象提供的方法向服務(wù)器發(fā)送和接受數(shù)據(jù),而FTPcommand(CString command)則是調(diào)用這兩個(gè)函數(shù)實(shí)現(xiàn)發(fā)送命令和接收響應(yīng)的功能。(代碼如下圖)值得一提的是m_fc表示響應(yīng)代碼的第一位。在FTP協(xié)議中,對(duì)響應(yīng)代碼有著詳細(xì)的規(guī)定,1yz表示預(yù)備狀態(tài),2yz表示完成狀態(tài),3yz表示中間狀態(tài),4yz表示暫時(shí)拒絕狀態(tài),5yz表示永久拒絕狀態(tài)。例如:150 File status okay; about to open data connection. (文件狀態(tài)OK,將打開數(shù)據(jù)連接)200 Command okay. (命令OK)331

12、 User name okay, need password. (用戶名OK,需要密碼)425 Can't open data connection. (不能打開數(shù)據(jù)連接)501 Syntax error in parameters or arguments. (參數(shù)語法錯(cuò)誤)故m_fc可用于判斷操作是否成功。BOOL Logon(CString hostname,int hostport,CString username, CString password);登錄FTP服務(wù)器的函數(shù),(主要代碼如下)。l 數(shù)據(jù)連接的實(shí)現(xiàn)BOOL DownloadFile(CString remotefile, CString localfile,BOOL get);數(shù)據(jù)傳輸由本函數(shù)實(shí)現(xiàn)流程圖如下:BOOL List();本函數(shù)用于接收由數(shù)據(jù)通道發(fā)來的文件列表信息,基本流程與Downloa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論