亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

用WinInet開發Internet客戶端應用指南(一)

系統 1796 0

一、概述

一個 Internet 客戶端程序的目的是通過 Internet 協議如: HTTP FTP 等來存取網絡數據源(服務器)的信息。客戶端程序可以訪問服務器獲得象天氣預報,股票價格、重要新聞數據,甚至是與服務器交換信息。 Internet 客戶端程序可以通過外部網絡( Internet )或內部網絡(一般為 Intranet )訪問服務器。

為了開發 Internet 客戶端程序。 MFC 類庫提供了專門的 Win32 Internet 擴展接口,也就是 WinInet MFC WinInet 封裝在一個標準的、易于使用的類集合中。在編寫 WinInet 客戶端程序時 , 你既可以直接調用 Win32 函數,也可以使用 WinInet 類庫。

Win32 Internet 擴展提供了對普通 Internet 協議的訪問,這些協議包括: HTTP FTP Gopher Gopher 已經漸漸淡出。借助于 WinInet 編程接口,開發人員不必去了解 Winsock TCP/IP 和特定 Internet 協議的細節就可以編寫出高水平的 Internet 客戶端程序。 WinInet 為所有幾種協議( HTTP FTP Gopher )提供了統一的函數集,也就是 Win32 API 接口。利用這些統一的函數集,大大簡化了針對 HTTP FTP 等協議的編程,從而輕松地將 Internet 集成到自己的應用程序中。底層協議的轉換(如從 FTP HTTP )只要對源代碼稍作修改就可以完成。

Visual C++ 工程中提供有兩種方式來使用 WinInet 。一種是直接調用 Win32 Internet 函數,另一種是使用 WinInet 類庫。

MFC WinInet 的封裝是通過提供三個由 CStdioFile 派生類實現的。這三個派生類是: CInternetFile CHttpFile CGopherFile 。由于 Gopher 協議已經很少使用,所以本文將不再對 CGopherFile 進行討論。對開發人員來說,不管你以前是否用過 CStdioFile WinInet 都是很好理解并且易于使用的。它使得存取 Internet 數據易如反掌,使得 Internet 數據和本地數據的處理一致透明,數據的存儲位置已經不再重要。

MFC WinInet 類有如下優點:

  • 緩沖器輸入輸出
  • 數據的類型安全處理
  • 許多函數的參數都是缺省值
  • 對普通的 Internet 錯誤進行異常處理
  • 自動清除打開的句柄和連接

使用 WinInet 提供的 API 函數 , 你可以:

  • 通過 HTTP 協議下載 HTML 頁, HTTP 協議是專門用于在服務器和客戶瀏覽器之間傳輸 HTML 頁。
  • 發送 FTP 請求上傳或下載文件以及獲取服務器的目錄信息。通過匿名登陸下載文件便是 FTP 的典型應用。
  • 其它基于 HTTP FTP 協議的應用。

使用 WinInet 的一般流程為:

用WinInet開發Internet客戶端應用指南(一)

圖一

下表描述了一個 Internet 客戶端程序實現的一般步驟:

(表一)

實現

方法

建立一個連接

創建 CInternetSession 對象,它是 WinInet Internet 客戶應用的前提條件

打開一個 URL

建立一個連接,調用 CInternetSession::OpenURL

函數,返回一個只讀資源對象

讀取 URL 數據

打開一個 URL ,調用 CInternetSession::QueryOption

查詢 Internet 選項設置

建立一個連接,調用 CInternetFile::Read

設置一個 Internet 選項

建立一個連接,調用 CInternetSession::SetOption

設置一個用狀態信息調用的函數

建立一個連接,調用 CInternetSession::EnableStatusCallback

重寫 CInternetSession::OnStatusCallback 函數

關閉連接

CInternetSession 對象方法,清除打開的連接

為了創建 Internet 客戶端程序, MFC 提供了如下的 C++ 類和全程函數:

C++

CInternetSession (父類 CObject
CInternetConnection (父類 CObject)
CFtpConnection
CGopherConnection
CHttpConnection
CInternetFile(父類 CStdioFile)
CGopherFile
CHttpFile
CFileFind(父類 CObject)
CFtpFileFind
CGopherFileFind
CGopherLocator(父類 CObject)
CInternetException(父類 CException)

全程函數 :

AfxParseURL
AfxGetInternetHandleType
AfxThrowInternetException

這些類和全程函數除 CFileFind AFX.H 里聲明之外,其余都在 AFXINET.H 文件里聲明。它們對 HTTP FTP Gopher 等協議進行了高度抽象,形成了一套高級 API 函數。 利用這些 API 可以快速直接地開發 Internet 應用。例如,連接到 FTP 服務器一般需要幾個步驟,而且需要做一些底層處理。但使用上述的 MFC 類提供的 API ,只需要對 CInternetSession::GetFTPConnection 進行一次調用,便可以輕松建立連接。

大家知道,每一個 Internet 應用其數據交換都是建立在 Internet 會話( Session )的基礎之上的, MFC 是通過 CInternetSession 類對象來實現 Internet 會話的。用這個類不僅可以創建會話,而且可以創建幾個并發的 Internet 會話。

為了與服務器進行通訊,除了要創建 CInternetSession 對象之外,還必須創建 CInternetConnection 對象 , 針對不同的協議, CInternetConnection 對象有三種類型:

  • CInternetSession::GetFtpConnection
  • CInternetSession::GetHttpConnection
  • CInternetSession::GetGopherConnection

這些函數調用并不會讀寫服務器上的文件。如果你想要讀寫數據,必須要打開文件才能操作。其處理流程應該是這樣的:

  • 首先創建 CInternetSession 對象實例
  • 如果創建的 Session 要讀寫文件,則必須創建 CInternetFile 對象實例(或者是它的子類 CHttpFile CGopherFile 對象實例)。其實,讀取數據最容易的方式是調用 CInternetSession::OpenURL 函數。 這個函數解析你提供的統一資源定位符( URL ),然后打開與 URL 指定的服務器連接,同時返回一個只讀的 CInternetFile 對象。 CInternetSession::OpenURL 不針對特定的協議類型 —— 不管是 FTP 還是 HTTP 都可以調用,它甚至可以處理本地文件,此時返回的是 CStdioFile ,而不是 CInternetFile
  • 如果創建的 Session 不讀寫文件,而是要實現其它的任務,如刪除某個 FTP 目錄下的文件等,則你不需要創建 CInternetFile 實例。

創建 CInternetFile 對象的方法有兩種:

  • 如果用 CInternetSession::OpenURL 建立與服務器的連接,調用返回 CStdioFile
  • 如果用 CInternetSession::GetFtpConnection GetGopherConnection 或者 CHttpConnection::OpenRequest 建立與服務器的連接,你必須調用相應的 CFtpConnection::OpenFile CGopherConnection::OpenFile 或者 CHttpConnection::OpenRequest ,返回的內容也與 CInternetFile CGopherFile 或者 CHttpFile 對應。

綜上所述,實現 Internet 客戶端應用的步驟因協議而異。要看你是創建基于 OpenURL 的一般 Internet 客戶端應用,還是使用 GetXXXConnection 函數之一針對特定協議的 Internet 客戶端應用。

在后繼文章中我們將進一步討論用 WinInet 實現 Internet 客戶端應用程序的具體步驟和細節。(待續)

源文檔 < http://www.vckbase.com/document/viewdoc/?id=545 >

用WinInet開發Internet客戶端應用指南(一)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美成人猛男性色生活 | 久久经典免费视频 | 日韩精品一区二区三区在线观看l | www.日本一区二区 | 九九视频免费看 | 久久久久久久久综合 | 日韩社区 | 在线观看成人影院 | 亚洲精品国产第一区二区多人 | 久久精品加勒比中文字幕 | 一级作爱视频免费观看 | 性欧美精品久久久久久久 | 久久精品爱 | 成人午夜视频网站 | 色婷婷婷婷| 国产精品伦理一区二区三区 | 91精品国产自产91精品 | 亚洲成在人天堂一区二区 | 奇米色奇米 | 亚洲综合伊人 | 久久成年人 | 国产福利短视频 | 亚洲国产人久久久成人精品网站 | 五月免费视频 | 日日综合网 | 久久精品亚洲欧美日韩久久 | 中国一级特黄高清免费的大片 | 亚洲欧美国产五月天综合 | 免费久久精品国产片香蕉 | 91手机视频在线 | 午夜视频在线观看国产www | 天天操夜夜 | 成人免费一区二区三区在线观看 | 日本中文字幕永久在线 | 午夜免费福利在线观看 | 国产精品国产福利国产秒拍 | 久草色播 | 精品无人乱码一区二区三区 | 亚州精品永久观看视频 | 日韩中文字幕在线看 | 美女福利在线观看 |