使用WinInet類有許多優越之處,它提供了對Gopher、HTTP、FTP等公共Internet協議的訪問方法,其中包括:
1) CInternetSession
2) CInternetConnection
3) CInternetFile
4) CHttpConnection
5) CGopherFile
6) CGopherConnection
7) CFtpConnection
8) CFileFind
9) CFtpFileFind
10) CGopherFileFind
11) CGopherLocator
12) CInternetException
使用WinInet類編程方法如下:
1. 創建CInternetSession類對象,創建並初始化Internet會話。
2. 建立CInternetSession對象與服務器的連接。該連接由CInternetConnect對象代表;可以通過CInternetSession::GetHttpConnection、CInternetSession::GetFTPConnection、CInternet::GetGopherConnection函數分別打開對應於三種特定協議的連接,它們分別由CInternetConnection的派生類CHttpConnection、CFtpConnection和CGopherConnection對象代表。
3. 在連接時,可以通過調用CInternetSession::QueryOption或CInternetSession::SetOption函數查詢或設置Internet請求選項。
4. 客戶應用程序在進行某些操作時,要耗費相當長的時間,因此有必要向用戶反饋當前數據處理的進程信息。這就需要派生自己的CInternetSession對象,重載OnStatusCallback函數實現回調程序的功能,並調用CInternetSession::EnableStatusCallback函數允許使用回調程序以監視會話的狀態。
5. 以上幾個步驟建立了客戶應用程序的工作環境,但它們並沒有對服務器進行任何操作,必須在此基礎上實現客戶應用程序的實際功能。通常客戶應用程序的主要功能是處理服務器的數據,因此應該獲得服務器的CInternetFile實例,可以通過兩種方法創建該實例:
1) 分別調用CGopherConnection::OpenFile、CFtpConnection::OpenFile和CHttpConnection::OpenRequest函數得到CInternetFile、CGopherFile和CHttpFile對象指針,其中CGopherFile和CHttpFile是CInternetFile和派生類,對於FTP直接使用基類CInternetFile,此外CHttpConnection、CFtpConnection和CGopherConnection對象由步驟2創建。
2) 另外一種更簡單的方法是:無需通過步驟2建立連接,直接通過調用CInternetSession::OpenURL,該函數解析指定的URL,建立與由URL所代表的服務器之間的連接,然后返回一個只讀的CInternetFile對象。該函數並不局限於某個特定的協議類型,它能夠處理任何FTP URL、HTTP URL、Gopher URL或本地文件。
6. 得到服務器文件后,就可以通過調用文件對象的Read函數和Write函數讀取或寫入文件。正如前面所講,對於FTP,所使用的文件對象為CInternetFile類,而HTTP和Gopher則使用CInternetFile的派生類CHttpFile和CGopherFile類對象。
7. 為了提高程序的容錯性和穩定性,對可能出現的問題進行處理是非常有必要的。對於Internet客戶,需要使用CInternetException類對象處理所有可知的常規的Internet異常類型。
8. 結束Internet會話,銷毀CInternetSession對象。