




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、用WinInet開發(fā)Internet客戶端應(yīng)用指南一、概述一個 Internet 客戶端程序的目的是通過 Internet 協(xié)議如:HTTP、FTP 等來存取網(wǎng)絡(luò)數(shù)據(jù)源(服務(wù)器)的信息。客戶端程序可以訪問服務(wù)器獲得象天氣預(yù)報,股票價格、重要新聞數(shù)據(jù),甚至是與服務(wù)器交換信息。Internet 客戶端程序可以通過外部網(wǎng)絡(luò)(Internet)或內(nèi)部網(wǎng)絡(luò)(一般為 Intranet)訪問服務(wù)器。為了開發(fā) Internet 客戶端程序。 MFC 類庫提供了專門的 Win32Internet 擴展接口,也就是 WinInet。MFC 將 WinInet 封裝在一個標準的、易于使用的類集合中。在編寫 WinI
2、net 客戶端程序時,你既可以直接調(diào)用 Win32 函數(shù),也可以使用 WinInet 類庫.Win32Internet 擴展提供了對普通 Internet 協(xié)議的訪問,這些協(xié)議包括:HTTP、FTP 和 GopheroGopher 已經(jīng)漸漸淡出。借助于 WinInet 編程接口,開發(fā)人員不必去了解 Winsock、TCP/IP 和特定 Internet 協(xié)議的細節(jié)就可以編寫出高水平的 Internet 客戶端程序。WinInet 為所有幾種協(xié)議 (HTTP、 FTP 和 Gopher) 提供了統(tǒng)一的函數(shù)集, 也就是 Win32API接口。利用這些統(tǒng)一的函數(shù)集,大大簡化了針對 HTTP、FTP
3、等協(xié)議的編程,從而輕松地將 Internet 集成到自己的應(yīng)用程序中。 底層協(xié)議的轉(zhuǎn)換 (如從 FTP到 HTTP)只要對源代碼稍作修改就可以完成。在 VisualC+工程中提供有兩種方式來使用 WinInet。一種是直接調(diào)用 Win32Internet 函數(shù),另一種是使用 WinInet 類庫。MFC 對 WinInet 的封裝是通過提供三個由 CStdioFile 派生類實現(xiàn)的。這三個派生類是:CInternetFile、CHttpFile 和 CGopherFile。由于 Gopher 協(xié)議已經(jīng)很少使用,所以本文將不再對 CGopherFile 進行討論。對開發(fā)人員來說,不管你以前是否用
4、過 CStdioFile,WinInet都是很好理解并且易于使用的。它使得存取 Internet 數(shù)據(jù)易如反掌,使得Internet 數(shù)據(jù)和本地數(shù)據(jù)的處理一致透明,數(shù)據(jù)的存儲位置已經(jīng)不再重要。MFCWinInet 類有如下優(yōu)點:緩沖器輸入輸出數(shù)據(jù)的類型安全處理許多函數(shù)的參數(shù)都是缺省值對普通的Internet 錯誤進行異常處理自動清除打開的句柄和連接使用 WinInet 提供的API 函數(shù),你可以:通過 HTTP 協(xié)議下載 HTML 頁,HTTP 協(xié)議是專門用于在服務(wù)器和客戶瀏覽器之間傳輸 HTML 頁。 發(fā)送 FTP 請求上傳或下載文件以及獲取服務(wù)器的目錄信息。通過匿名登陸下載文件便是 FTP
5、 的典型應(yīng)用。其它基于 HTTP、FTP 協(xié)議的應(yīng)用。使用 WinInet 的一般流程為:建立在搔建立在搔發(fā)出請求發(fā)出請求圖一F 表描述了一個 Internet 客戶端程序?qū)崿F(xiàn)的一般步驟:(表一)實現(xiàn)方法建立一個連接創(chuàng)建CInternetSession對象,它是WinInetInternet客戶應(yīng)用的前提條件打一個URL建立一個連接,調(diào)用CInternetSession:OpenURL函數(shù),返回一個只讀資源對象讀取URL數(shù)據(jù)打開一,個URL調(diào)用CInternetSession二QueryOption;查詢Internet選項設(shè)置建立一個連接,調(diào)用CInternetFile:Read設(shè)置一個In
6、ternet選項建立一個連接,調(diào)用CInternetSession:SetOption設(shè)置一個用狀態(tài)信息調(diào)用的函數(shù)建立一個連接,調(diào)用CInternetSession二EnableStatusCallback重寫CInternetSession二OnStatusCallback函數(shù)關(guān)閉連接用CInternetSession對象方法,清除打開的連接為了創(chuàng)建 Internet 客戶端程序,MFC 提供了如下的 C+類和全程函數(shù):C+類CInternetSession(父類CObject)CInternetConnection(父類CObject)CFtpConnectionCGopherConnec
7、tionCHttpConnectionCInternetFile(父類CStdioFile)CGopherFileCHttpFileCFileFind(父類CObject)CFtpFileFindCGopherFileFindCGopherLocator(父類CObject)CInternetException(父類CException)全程函數(shù):AfxParseURLAfxGetInternetHandleTypeAfxThrowInternetException這些類和全程函數(shù)除 CFileFind 在 AFX.H 里聲明之外,其余都在AFXINET.H 文件里聲明。它們對 HTTP、FT
8、P 和 Gopher 等協(xié)議進行了高度抽象,形成了一套高級 API 函數(shù)。利用這些 API 可以快速直接地開發(fā) Internet應(yīng)用。例如,連接到 FTP 服務(wù)器一般需要幾個步驟,而且需要做一些底層處理。但使用上述的 MFC 類提供的 API,只需要對CInternetSession:GetFTPConnection 進行一次調(diào)用,便可以輕松建立連接。大家知道,每一個 Internet 應(yīng)用其數(shù)據(jù)交換都是建立在 Internet 會話(Session)的基礎(chǔ)之上的,MFC 是通過 CInternetSession 類對象來實現(xiàn) Internet 會話的。用這個類不僅可以創(chuàng)建會話,而且可以創(chuàng)建幾
9、個并發(fā)的 Internet 會話。為了與服務(wù)器進行通訊,除了要創(chuàng)建 CInternetSession 對象之外,還必須創(chuàng)建 CInternetConnection 對象,針對不同的協(xié)議,CInternetConnection 對象有三種類型:CInternetSession 二 GetFtpConnectionCInternetSession 二 GetHttpConnectionCInternetSession 二 GetGopherConnection這些函數(shù)調(diào)用并不會讀寫服務(wù)器上的文件。如果你想要讀寫數(shù)據(jù),必須要打開文件才能操作。其處理流程應(yīng)該是這樣的:首先創(chuàng)建 CInternetSes
10、sion 對象實例如果創(chuàng)建的 Session 要讀寫文件,則必須創(chuàng)建 CInternetFile 對象實例(或者是它的子類 CHttpFile、CGopherFile 對象實例)。其實,讀取數(shù)據(jù)最容易的方式是調(diào)用CInternetSession:OpenURL 函數(shù)。這個函數(shù)解析你提供的統(tǒng)一資源定位符(URL),然后打開與 URL 指定的服務(wù)器連接,同時返回一個只讀的CInternetFile 對象。CInternetSession:OpenURL 不針對特定的協(xié)議類型一一不管是 FTP 還是 HTTP 都可以調(diào)用,它甚至可以處理本地文件,此時返回的是 CStdioFile,而不是 CInte
11、rnetFile。如果創(chuàng)建的 Session 不讀寫文件,而是要實現(xiàn)其它的任務(wù),如刪除某個 FTP 目錄下的文件等,則你不需要創(chuàng)建 CInternetFile 實例。創(chuàng)建 CInternetFile 對象的方法有兩種:如果用 CInternetSession:OpenURL 建立與服務(wù)器的連接,調(diào)用返回CStdioFile。如果用 CInternetSession 二 GetFtpConnection、GetGopherConnection或者CHttpConnection二OpenRequest建立與服務(wù)器的連接,你必須調(diào)用相應(yīng)的 CFtpConnection:OpenFile、CGophe
12、rConnection 二 OpenFile 或者CHttpConnection:OpenRequest,返回的內(nèi)容也與 CInternetFileCGopherFile 或者 CHttpFile 對應(yīng)。綜上所述,實現(xiàn) Internet 客戶端應(yīng)用的步驟因協(xié)議而異。要看你是創(chuàng)建基于 OpenURL 的一般 Internet 客戶端應(yīng)用,還是使用GetXXXConnection 函數(shù)之一針對特定協(xié)議的 Internet 客戶端應(yīng)用。在后繼文章中我們將進一步討論用 WinInet 實現(xiàn) Internet 客戶端應(yīng)用程序的具體步驟和細節(jié)。二、實現(xiàn)步驟大家知道,每個 Internet 客戶端程序都伴隨
13、有一定的目的行為,如讀文件、寫文件、刪除文件等等。客戶端的程序要實現(xiàn)這些行為的先決條件是建立 Internet 連接。然后再根據(jù)不同的目的進行具體的操作。為了方便起見,下面這這些張表格針對不同的應(yīng)用行為列出了所需要的具體操作。其中列出了一般的 InternetURL(FTP、或者 HTTP)客戶端行為要實現(xiàn)某個目標所必須使用的方法。這張表格的內(nèi)容來自 MSDN。我對部分我認為重要的地方做了補充。(表一)一個典型的 Internet 客戶端程序的處理流程目的方法結(jié)果開女 L 個Internetsession創(chuàng)建CInternetSession對象初始化WinInet,并連接服務(wù)器讀取或設(shè)置Int
14、ernetQuery選項(如超時或重試次數(shù))調(diào)用CInternetSession:SetOption不成功返回FALSE建乂回調(diào)函調(diào)用CInternetSession二OnStatusCa數(shù)監(jiān)視CInternetSession:EnableStatusllback,重寫session狀CallbackOnStatusCallback,創(chuàng)建自己的態(tài)建立回調(diào)函數(shù)回調(diào)例程Internet服務(wù)器Intranet服務(wù)器或本地文件調(diào)用CInternetSession:OpenURL解析并打開到指定服務(wù)器的連接,返回CStdioFile(如果你傳遞的OpenURL是本地文件名)或CInternetFile對
15、象,通過存取這個對象,獲得服務(wù)器或文件的數(shù)據(jù)讀義件調(diào)用CInternetFile: :Read用你提供的Buffer讀指定的字節(jié)數(shù)異常處理在CInternetException類中處理處理所有普通的Internet異常結(jié)束Internetsession理處CInternetSession對象自動消除打開的句柄的連接(表二)典型的 FTP 客戶端程序?qū)崿F(xiàn)的一般步驟目的方法結(jié)果開女 L 個FTP會創(chuàng)建一個CInternetSession對象,調(diào)用初始化WinInet話,建立一個FTP連接CInternetSession:GetFtpConnection并聯(lián)接服務(wù)器連接到一個FTPServer用CI
16、nternetSession:GetFtpConnection返回一個CFtpConnection對象CD到FTP服務(wù)器的一個新目錄用CFtpConnection二SetCurrentDirectoryCD至ijFTP月艮務(wù)器的一個新目錄Find第一個FTP目錄中的文件創(chuàng)建一個CFtpFileFind對象,調(diào)用CFtpFileFind:FindFile,OpenURL函數(shù)返回一個只讀資源對象;調(diào)用CFtpFileFind:FindFileFind第一個文件,如果文件每找到返回FALSE愎舉所有可獲得的資源,F(xiàn)ind下一個FTP目錄中的文件Find下一個資源,調(diào)用CFtpFileFind:Fin
17、dNextFile直到返回FALSE。Find下一個文件如果文件沒找到返回FALSE打開FindFile或FindNextFile找至U的文件(用于讀寫)調(diào)用CFtpConnection:OpenFile,參數(shù)為FindFile或FindNextFile返回的文件名,創(chuàng)建并打開一個CInternetFile對象打開FindFile或FindNextFile找至U的文件(用于讀寫),返回一個CInternetFile對象讀寫文件以讀方式打開FTP文件,用CInternetFile:Read使用你指定的緩沖讀指定的字節(jié)數(shù)寫FTP文件以寫方式打開FTP文件,調(diào)用CInternetFile:Write
18、,重寫CInternetSession:OnStatusCallback使用你指定的緩沖寫指定的字節(jié)數(shù)改變客戶端在服務(wù)器上的目錄調(diào)用CFtpConnection二SetCurrentDirectory進入新的目錄獲取客戶端在服務(wù)器上的當前目錄調(diào)用CFtpConnection二GetCurrentDirectory獲取目錄信息異常處理用CInternetException類處理所有普通的Internet異常類型結(jié)束FTPsession處理CInternetSession對象自動消除打開的句柄的連接(表三)顯示了一個典型的刪除文件的 FTP 客戶端應(yīng)用要實現(xiàn)的一般步驟:目的方法結(jié)果開叫個FTPse
19、ssion創(chuàng)建一個CInternetSession對象初始化WinInet并聯(lián)接服務(wù)器連接到一個FTPServer用CInternetSession二GetFtpConnection返回一個CFtpConnection對象檢查FTP目錄是否止確用CFtpConnection二GetCurrentDirectory或CFtpConnection:GetCurrentDirectoryAsUR返回目錄名字服務(wù)器目錄或返L回目錄的URLCD(改變目用CFtpConnection:SetCurrentDirectoryCD至ijFTP月艮務(wù)器錄)至IFTP的一個服務(wù)器的一新目錄個新目錄Find第一個用CFtpFileFind:FindFileFind第一個文件,FTP目錄中的如果文件每找到文件返回FALSEFind下一個用CFtpFileFind:FindNextFileFind下一個文件FTP目錄中的如果文件沒找到文件返回FALSE刪除FindFile用CFtpConnection:Remove用FindFile或刪除FindFile或或FindNextFile返回的文件名FindNextFileFindNextFil找到的文件e找到的文件異常處理用CInternetException類處理所有普通的Internet異常
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度人社部員工勞動合同企業(yè)年金與福利待遇合同
- 2025年度退貨商品退換貨時限協(xié)議
- 社區(qū)居民心理健康教育與文化傳承
- 業(yè)務(wù)信息合同范本
- 2025至2030年中國監(jiān)控病床數(shù)據(jù)監(jiān)測研究報告
- 科技發(fā)展下的新型石油化工設(shè)備防爆檢測技術(shù)
- 玉器加盟合同范本
- 科技助力商業(yè)發(fā)展-新產(chǎn)品前瞻
- 電子商務(wù)營銷崗位的策略與技巧
- 科技園區(qū)企業(yè)知識產(chǎn)權(quán)交易的流程與規(guī)范
- 歷屆 最近十年 (新知杯)上海市初中數(shù)學(xué)競賽試卷及答案(含模擬試題及解答)
- 艙門操作(空客系列飛機)
- 臺灣長庚文化村
- 藥理學(xué)免疫器官和組織
- 禮儀與溝通完整版
- 2023年超齡員工承諾書 60歲以上員工承諾書(八篇)
- 001 比較思想政治教育(第二版) 第一章
- 股骨粗隆間骨折PPT
- 供應(yīng)商年度評審記錄表
- 飲用水源地保護區(qū)環(huán)境整治工程項目可行性論證報告建議書
- 第五部分茶藝館的經(jīng)營與管理
評論
0/150
提交評論