資源描述:
《關(guān)于vc實(shí)現(xiàn)ftp編程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、一.概述TCP/IP協(xié)議是一個(gè)四層協(xié)議,它由應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和鏈路層構(gòu)成。TCP/IP協(xié)議棧的每一層都由許多協(xié)議構(gòu)成,從而構(gòu)成了一個(gè)協(xié)議簇。應(yīng)用層主要包括的協(xié)議有Telnet、FTP、HTTP、SMTP/POP3和DNS等。傳輸層主要包括的協(xié)議有TCP和UDP。網(wǎng)絡(luò)層主要包括IP和IP的附屬協(xié)議。數(shù)據(jù)鏈路層主要包括的協(xié)議有ARP(地址解析協(xié)議)、RARP協(xié)議、Ethernet協(xié)議等。FTP(FileTransferProtocol)協(xié)議主要用來在網(wǎng)絡(luò)上進(jìn)行文件傳輸。FTP通訊除了有一個(gè)默認(rèn)的端口21外,還有其他端口,同城兩個(gè)端口同時(shí)進(jìn)行數(shù)據(jù)傳輸。一
2、個(gè)是默認(rèn)的端口(通常為21),主要進(jìn)行控制連接,即進(jìn)行命令協(xié)議及服務(wù)器端響應(yīng)碼的傳輸。另一個(gè)非標(biāo)準(zhǔn)端口主要進(jìn)行數(shù)據(jù),上傳下載文件等。關(guān)于FTP協(xié)議和FTP命令的詳細(xì)描述,參考《VisualC網(wǎng)絡(luò)通信編程實(shí)用案例精選》。實(shí)現(xiàn)FTP協(xié)議,有兩種方式,實(shí)用WinInetAPI和使用基本W(wǎng)insock。對(duì)于一般應(yīng)用,用WinInet效率要高,而且簡單。也可以用Winsock來編寫,這樣更加靈活,但是復(fù)雜度高且需要對(duì)協(xié)議非常熟悉。二.VC開發(fā)在項(xiàng)目中,為了開發(fā)效率,使用了WinInet的方式。FTP是MFC的WinInet支持的三個(gè)Internet功能(HTTP,
3、gopher)之一,我們需要先創(chuàng)建一個(gè)CInternetSession實(shí)例和一個(gè)CFtpConnection對(duì)象就可以實(shí)現(xiàn)和一個(gè)FTP服務(wù)器的通信。不需要直接創(chuàng)建CFtpConnection對(duì)象,而是通過調(diào)用CInternetsession::GetFtpConnection來完成這項(xiàng)工作。它創(chuàng)建CFtpConnection對(duì)象并返回一個(gè)指向該對(duì)象的指針。要聯(lián)接到FTP服務(wù)器,需要兩個(gè)步驟,首先必須創(chuàng)建一個(gè)CInternetSession對(duì)象,用類CInternetSession創(chuàng)建并初始化一個(gè)或幾個(gè)同時(shí)存在的Internet會(huì)話(session),并描
4、述與代理服務(wù)器的連接(如果有必要的話),如果在程序運(yùn)行期間需要保持與Internet的連接,可以創(chuàng)建一個(gè)CInternetsession對(duì)象作為類CWinApp的成員。然后利用CInternetsession對(duì)象獲取CFtpConnection對(duì)象。MFC中的類CFtpConnection管理我們與Internet服務(wù)器的連接,并直接操作服務(wù)器上的目錄和文件。1.Ftp連接類的信息下面我們簡要介紹連接類的信息1.1建立連接CInternetsession對(duì)象CInternetsession(LPCTSTRpstrAgent,DWORDdwConText,
5、DWORDdwACCESSType,LPCTSTRpstrProxyName,LPCTSTRpstrProxyBypass,DWORDdwFlags);在創(chuàng)建CInternetSession對(duì)象時(shí)調(diào)用這個(gè)成員函數(shù),CInternetsession是應(yīng)用程序第一個(gè)要調(diào)用的Internet函數(shù),它將創(chuàng)始化內(nèi)部數(shù)據(jù)結(jié)構(gòu),以備將來在應(yīng)用程序中調(diào)用。如果dwFlags包含INTERNET_FLAG_ASYNC,那末從這個(gè)句柄派生的所有的句柄,在狀態(tài)回調(diào)例程注冊(cè)之前,都會(huì)出現(xiàn)異步狀態(tài)。如果沒有打開Internet連接,CInternetsession就會(huì)拋出一個(gè)例外
6、,AfxThrowInternetException。GetFtpConnection()函數(shù)CFtpConnection*CIternetsession::GetFtpConnection(LPCTSTRpstrServer,LPCTSTRpstrUserName,LPCTSTRpstrPassword,INTERNET_PORTnPort,BOOLbPassive);調(diào)用這個(gè)函數(shù)建立一個(gè)FTP連接,并獲得一個(gè)指向CFtpConnection對(duì)象的指針,GetFtpConnection連接到一個(gè)FTP服務(wù)器,創(chuàng)建并返回指向CFtpConnection對(duì)
7、象的指針,它不在服務(wù)器上進(jìn)行任何操作。如果打算讀寫文件,必須進(jìn)行分步操作。關(guān)于查找,打開和讀寫文件的信息需參考CFtpConnection和CFtpFileFind類。對(duì)這個(gè)函數(shù)的調(diào)用返回一個(gè)指向CFtpConnection對(duì)象的指針。如果調(diào)用失敗,檢查拋出的CInternetException對(duì)象,就可以確定失敗的原因。1.2遠(yuǎn)程目錄操作CreateDirectory()函數(shù)BOOLCreateDirectory(LPCTSTRpstrDirName);ReturnValueNonzeroifsuccessful;otherwise0.Ifthecal
8、lfails,theWindowsfunctionGetLastErrormay