程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 用WinInet開發Internet客戶端應用指南(二)

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

編輯:關於VC++

二、實現步驟

大家知道,每個Internet客戶端程序都伴隨有一定的目的行為,如讀文件、寫文件、刪除文件等等。客戶端的程序要實現這些行為的先決條件是建立Internet連接。然後再根據不同的目的進行具體的操作。為了方便起見,下面這這些張表格針對不同的應用行為列出了所需要的具體操作。其中列出了一般的Internet URL (FTP、或者 HTTP)客戶端行為要實現某個目標所必須使用的方法。這張表格的內容來自MSDN。我對部分我認為重要的地方做了補充。

(表一)一個典型的Internet客戶端程序的處理流程 目的 方法 結果 開始一個Internet session 創建 CInternetSession 對象 初始化WinInet,並連接服務器 讀取或設置 InternetQuery 選項 (如超時或重試次數) 調用 CInternetSession::SetOption 不成功返回FALSE 建立回調函數監視session狀態 調用CInternetSession::EnableStatusCallback

建立回調函數

CInternetSession::OnStatusCallback,重寫OnStatusCallback,創建自己的回調例程 Internet服務器Intranet服務器或本地文件 調用 CInternetSession::OpenURL 解析並打開到指定服務器的連接,返回CStdioFile(如果你傳遞的OpenURL是本地文件名)或CInternetFile對象,通過存取這個對象,獲得服務器或文件的數據 讀文件 調用 CInternetFile::Read 用你提供的Buffer讀指定的字節數 異常處理 在 CInternetException 類中處理 處理所有普通的 Internet 異常類型 結束 Internet session 處理 CInternetSession對象 自動清除打開的句柄的連接

(表二)典型的 FTP 客戶端程序實現的一般步驟

目的 方法 結果 開始一個FTP會話,建立一個FTP連接 創建一個CInternetSession對象,調用CInternetSession::GetFtpConnection 初始化WinInet

並聯接服務器

連接到一個FTP Server 用CInternetSession::GetFtpConnection 返回一個CFtpConnection對象 CD到 FTP 服務器的一個新目錄 用CFtpConnection::SetCurrentDirectory CD到FTP服務器的一個

新目錄

Find 第一個FTP目錄中的文件 創建一個CFtpFileFind對象,調用CFtpFileFind::FindFile,OpenURL函數返回一個只讀資源對象;調用CFtpFileFind::FindFile Find第一個文件,如果文件每找到返回FALSE 枚舉所有可獲得的資源,Find下一個FTP目錄中的文件 Find下一個資源,調用CFtpFileFind::FindNextFile直到返回FALSE。 Find下一個文件

如果文件沒找到返回FALSE

打開FindFile或FindNextFile找到的文件(用於讀寫) 調用CFtpConnection::OpenFile,參數為FindFile或FindNextFile返回的文件名 ,創建並打開一個CInternetFile對象 打開FindFile或FindNextFile找到的文件(用於讀寫),返回一個CInternetFile對象 讀寫文件 以讀方式打開FTP文件,用CInternetFile::Read 使用你指定的緩沖讀

指定的字節數

寫FTP文件 以寫方式打開FTP文件,調用CInternetFile::Write,重寫CInternetSession::OnStatusCallback 使用你指定的緩沖寫

指定的字節數

改變客戶端在服務器上的目錄 調用CFtpConnection::SetCurrentDirectory 進入新的目錄 獲取客戶端在服務器上的當前目錄 調用CFtpConnection::GetCurrentDirectory 獲取目錄信息 異常處理 用CInternetException類  處理所有普通的Internet異常類型 結束FTP session 處理CInternetSession對象 自動清除打開的句柄的連接

(表三)顯示了一個典型的刪除文件的FTP客戶端應用要實現的一般步驟:

目的 方法 結果 開始一個FTP session 創建一個CInternetSession對象 初始化WinInet

並聯接服務器

連接到一個FTP Server 用CInternetSession::GetFtpConnection 返回一個CFtpConnection對象 檢查FTP目錄是否正確 用CFtpConnection::GetCurrentDirectory或CFtpConnection::GetCurrentDirectoryAsURL 返回目錄名字

服務器目錄或返回目錄的URL

CD(改變目錄)到 FTP 服務器的一個新目錄 用CFtpConnection::SetCurrentDirectory CD到FTP服務器的一個

新目錄

Find 第一個FTP目錄中的文件 用CFtpFileFind::FindFile Find第一個文件,如果文件每找到返回FALSE Find 下一個FTP目錄中的文件 用CFtpFileFind::FindNextFile Find下一個文件

如果文件沒找到返回FALSE

刪除FindFile或FindNextFile找到的文件  用CFtpConnection::Remove用FindFile或FindNextFile返回的文件名 刪除FindFile或FindNextFile

找到的文件

異常處理 用CInternetException類  處理所有普通的Internet異常類型 結束FTP session 處理CInternetSession對象 自動清除打開的句柄的連接

(表四)顯示了實現一個典型的 HTTP 客戶端應用程序的一般步驟:

目的 方法 結果 開始HTTP會話,建立HTTP連接 創建 CInternetSession對象,調用CInternetSession::GetHttpConnection

創建CHttpConnection對象

初始化WinInet並聯接服務器,返回一個CHttpConnection對象 創建一個 HTTP 請求 調用CHttpConnection::OpenRequest

創建一個CHttpFile對象;

返回一個CHttpFile對象 發送一個HTTP 請求 用CHttpFile::AddRequestHeaders 並且用CHttpFile::SendRequest Find一個文件

如果文件沒找到返回FALSE

讀文件 調用CInternetFile::Read 使用你提供的緩沖讀指定的字節 獲取HTTP請求信息 調用CHttpFile::QueryInfo 從服務器獲取HTTP請求頭信息 異常處理 利用CInternetException類 處理所有普通的Internet異常類型 結束 HTTP 會話 處理CInternetSession對象 自動清除打開的句柄的連接

由於時間關系,我沒有寫本文的例子代碼。不過MSDN裡有兩個簡單的例子可以參考,一個是FTPTREE,另一個是TEAR。此外,也可以用“WinInet”作為關鍵字在google裡搜一下也能找到一些使用MFC WinInet的技術信息。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved