




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于Winsock的FTP客戶(hù)端的實(shí)現(xiàn)目錄一、 課程設(shè)計(jì)基本要求2l 課程設(shè)計(jì)目的2l 課程設(shè)計(jì)任務(wù)3l 課程設(shè)計(jì)要求3二、 程序簡(jiǎn)介3l 開(kāi)發(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類(lèi)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編寫(xiě)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下載工具(客戶(hù)端)。 2、 程序簡(jiǎn)介l 開(kāi)發(fā)環(huán)境 操作系統(tǒng):Microsoft Windows XP pro編譯環(huán)境:Microsoft Visual C+ 6.0:PM-1.7GHz內(nèi)存:768MB硬盤(pán):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ù)器 ,或者通過(guò)允許匿名FTP來(lái)使用 FTP服務(wù)器。FTP最早的設(shè)計(jì)是用于兩臺(tái)不同的主機(jī)即不同的操作系統(tǒng)下 ,不同的文件結(jié)構(gòu) ,不同的字符集。FTP是建立兩個(gè) TCP連接 (見(jiàn)圖) ,一個(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通過(guò)執(zhí)行“Telnet” (虛擬終端 )模塊或通過(guò)完全重新實(shí)施 Telnet作為“ 協(xié)議解析器 ”。FTP命令以純文本形式發(fā)送 ,其響應(yīng)同樣也是純文本形式 ,并在三位數(shù)字后跟某些文本。這些數(shù)字可由軟件用來(lái)確定下面要采取的步驟。而文本則供用戶(hù)閱讀。每一個(gè)命令都會(huì)產(chǎn)生一個(gè)或多個(gè)響應(yīng)。l 應(yīng)用WinSock實(shí)現(xiàn)網(wǎng)絡(luò)通信WinSock是Microsoft等公司聯(lián)合開(kāi)發(fā)的網(wǎng)絡(luò)編程接口, 其實(shí)是一種進(jìn)程間相互通信的機(jī)制,并將這種進(jìn)程間通信從單機(jī)環(huán)境擴(kuò)展到網(wǎng)絡(luò)環(huán)境, 適合
5、于開(kāi)發(fā)主機(jī)/客戶(hù)機(jī)通信程序。 網(wǎng)絡(luò)通信包括兩臺(tái)主機(jī)或者兩個(gè)進(jìn)程通過(guò)網(wǎng)絡(luò)傳遞數(shù)據(jù), 網(wǎng)絡(luò)的每一端稱(chēng)為一個(gè)端點(diǎn), 而WinSock為網(wǎng)絡(luò)端點(diǎn)的抽象表示。當(dāng)用其編程時(shí),程序在網(wǎng)絡(luò)對(duì)話的每端都需要一個(gè) Socket,兩個(gè)Socket之間可以應(yīng)用面向連接的或者是無(wú)連接的網(wǎng)絡(luò)協(xié)議。面向連接的協(xié)議通過(guò)互換確認(rèn)信息在連接端口之間建立一條虛電路,它不必關(guān)心網(wǎng)絡(luò)軟件傳送數(shù)據(jù)。因而面向連接的客戶(hù)程序不必指定本地協(xié)議端口, 而只需為Socket提供遠(yuǎn)程主機(jī)信息;IP地址和協(xié)議端口,WinSock可自動(dòng)保存本地IP地址和選擇本地端口。面向連接的WinSock客戶(hù)機(jī)/服務(wù)器模型,服務(wù)器在沒(méi)有請(qǐng)求到達(dá)時(shí),它處于等待狀態(tài)。
6、一旦請(qǐng)求到來(lái),服務(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)程稱(chēng)為從服務(wù)器。這種主從服務(wù)器的方式巧妙地解決了并發(fā)請(qǐng)求問(wèn)題。4、 主要數(shù)據(jù)結(jié)構(gòu)CSFTPApp類(lèi)CWinApp類(lèi)的派生類(lèi),由編譯器自動(dòng)生成,該對(duì)象代表了應(yīng)用進(jìn)程的主線程。CMainFrame類(lèi)CFrameWnd類(lèi)的派生類(lèi),由編譯器自動(dòng)生成,用于創(chuàng)建應(yīng)用程序的主窗口,它能很好地支持系統(tǒng)菜單和控制條(工具條、狀態(tài)條等)。在編寫(xiě)文檔/視圖結(jié)構(gòu)的應(yīng)用程序時(shí),它作為主窗口管理視圖和文檔對(duì)象。CSFTPDoc類(lèi)CDocument類(lèi)的派生類(lèi),由編譯器自動(dòng)
7、生成,它只是提供了一個(gè)框架,為文檔對(duì)象與相關(guān)的其他對(duì)象(視圖、應(yīng)用程序?qū)ο蠹翱蚣艽翱诘龋┻M(jìn)行交互提供了框架。對(duì)CSFTPDoc類(lèi)的設(shè)計(jì)工作,基本上都是在這個(gè)已有框架的基礎(chǔ)上,添加所需要的功能代碼。 CDFTPView類(lèi)CListView類(lèi)的派生類(lèi),同樣由編譯器自動(dòng)生成,在本程序中用于顯示FTP服務(wù)器上的文件列表。CAboutDlg類(lèi)CDialog類(lèi)的派生類(lèi),由編譯器自動(dòng)生成,用于顯示幫助信息。CMessageDlg類(lèi)CDialog類(lèi)的派生類(lèi),用于顯示從FTP服務(wù)器發(fā)來(lái)的響應(yīng)信息。CListItem類(lèi)用來(lái)解析FTP服務(wù)器發(fā)送過(guò)來(lái)的文件列表信息,將每個(gè)文件的類(lèi)型、名稱(chēng)、大小、創(chuàng)建時(shí)間和訪問(wèn)權(quán)限分別
8、提取出來(lái)。CFTPClient類(lèi)這是實(shí)現(xiàn)FTP協(xié)議的主要部分,也是本文檔要著重解釋的一個(gè)類(lèi)。5、 CFTPClient類(lèi)l 控制連接的實(shí)現(xiàn)FTP客戶(hù)端與服務(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類(lèi)。使用方法如下:首先,構(gòu)造一個(gè)CSocket對(duì)象;調(diào)用Create函數(shù)創(chuàng)建
9、一個(gè)socket對(duì)象(SOCK_STREAM類(lèi)型)。接著,如果是客戶(hù)程序,調(diào)用Connect連接到遠(yuǎn)地主機(jī);如果是服務(wù)器程序,先調(diào)用Listen監(jiān)聽(tīng)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ì)象是用于讀或者寫(xiě)。如果既要讀又要寫(xiě),則創(chuàng)建兩個(gè)CArchive對(duì)象。創(chuàng)建工作完成之后,使用CArchive對(duì)象在客戶(hù)和服務(wù)器之間傳送數(shù)據(jù)。使用完畢,銷(xiāo)毀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,將打開(kāi)數(shù)據(jù)連接)200 Command okay. (命令OK)331
12、 User name okay, need password. (用戶(hù)名OK,需要密碼)425 Can't open data connection. (不能打開(kāi)數(shù)據(jù)連接)501 Syntax error in parameters or arguments. (參數(shù)語(yǔ)法錯(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ā)來(lái)的文件列表信息,基本流程與Downloa
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 師德期末考試試題及答案
- 醫(yī)療衛(wèi)生考試試題及答案
- 工程法規(guī)考試2025年劃重點(diǎn)試題
- 模擬考試-2025年工程法規(guī)典型試題及答案
- 如何培養(yǎng)生產(chǎn)計(jì)劃人才
- 設(shè)定工作優(yōu)先級(jí)的科學(xué)方法計(jì)劃
- 財(cái)務(wù)管理職業(yè)素養(yǎng)提升的考題試題及答案
- 經(jīng)營(yíng)預(yù)算計(jì)劃
- 高效秘書(shū)的思維方式計(jì)劃
- 倉(cāng)庫(kù)個(gè)人工作計(jì)劃的效率與成果
- 中國(guó)生鐵行業(yè)發(fā)展現(xiàn)狀及市場(chǎng)前景分析預(yù)測(cè)報(bào)告
- 建筑工程質(zhì)量管理試題及答案
- 2025年保密教育線上培訓(xùn)考試試題及答案
- JJG 693-2011可燃?xì)怏w檢測(cè)報(bào)警器
- 八項(xiàng)規(guī)定知識(shí)測(cè)試習(xí)題庫(kù)帶答案版(打印版)
- 操作系統(tǒng)-作業(yè)實(shí)驗(yàn)1存儲(chǔ)管理
- 多學(xué)科診療糖尿病足病例分享
- 施工進(jìn)度計(jì)劃網(wǎng)絡(luò)圖、橫道圖
- 汽車(chē)起重機(jī)檢查及記錄表(月檢)
- 公司委托經(jīng)營(yíng)協(xié)議
- 實(shí)用美學(xué)第九講飲食美學(xué)課件
評(píng)論
0/150
提交評(píng)論