首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

WinInet 開發 Internet 客戶端應用程式完全指南(下)

     編輯:關於VC++

實作步驟詳細解析

每個 Internet 客戶端程式都有特定的目的行為——讀檔、寫檔、刪除檔案等。實現這些行為的先決條件是建立 Internet 連線,再根據不同目的執行具體操作。以下整理針對不同應用行為所需的具體操作步驟,內容參考 MSDN 並補充關鍵細節。

表一:典型 Internet 客戶端程式處理流程(通用 URL:FTP/HTTP)

目的方法結果
開始 Internet Session建立 CInternetSession 物件初始化 WinInet,連接伺服器
讀取/設定 Internet 查詢選項(如逾時、重試次數)呼叫 CInternetSession::SetOption失敗回傳 FALSE
建立回呼函式監控 Session 狀態呼叫 CInternetSession::EnableStatusCallback,建立回呼函式,覆寫 OnStatusCallback建立自訂回呼常式
存取 Internet/Intranet 伺服器或本地檔案呼叫 CInternetSession::OpenURL解析並開啟至指定伺服器連線,回傳 CStdioFile(本地檔案)或 CInternetFile 物件,透過存取該物件取得資料
讀取檔案呼叫 CInternetFile::Read使用提供的緩衝區讀取指定位元組數
異常處理在 CInternetException 類別中處理處理所有常見 Internet 異常類型
結束 Internet Session處理 CInternetSession 物件自動清理開啟的控制代碼與連線

表二:典型 FTP 客戶端程式實作步驟

目的方法結果
開始 FTP 會話,建立 FTP 連線建立 CInternetSession,呼叫 GetFtpConnection初始化 WinInet 並連接伺服器
連接到 FTP Server使用 CInternetSession::GetFtpConnection回傳 CFtpConnection 物件
切換至 FTP 伺服器新目錄呼叫 CFtpConnection::SetCurrentDirectory進入 FTP 伺服器指定目錄
尋找第一個 FTP 目錄檔案建立 CFtpFileFind,呼叫 FindFile尋找第一個檔案,未找到回傳 FALSE
列舉所有資源,尋找下一個檔案呼叫 CFtpFileFind::FindNextFile 直到回傳 FALSE尋找下一個檔案,未找到回傳 FALSE
開啟找到的檔案(讀/寫)呼叫 CFtpConnection::OpenFile,參數為檔名建立並開啟 CInternetFile 物件
讀取檔案以讀模式開啟,呼叫 CInternetFile::Read使用指定緩衝區讀取資料
寫入檔案以寫模式開啟,呼叫 CInternetFile::Write,覆寫 OnStatusCallback使用指定緩衝區寫入資料
變更客戶端在伺服器上的目錄呼叫 CFtpConnection::SetCurrentDirectory進入新目錄
取得客戶端在伺服器上的目前目錄呼叫 CFtpConnection::GetCurrentDirectory取得目錄資訊
異常處理使用 CInternetException 類別處理所有常見 Internet 異常
結束 FTP Session處理 CInternetSession 物件自動清理開啟的控制代碼與連線

表三:刪除檔案的 FTP 客戶端應用步驟

目的方法結果
開始 FTP Session建立 CInternetSession 物件初始化 WinInet 並連接伺服器
連接到 FTP Server使用 CInternetSession::GetFtpConnection回傳 CFtpConnection 物件
檢查 FTP 目錄是否正確呼叫 GetCurrentDirectory 或 GetCurrentDirectoryAsURL回傳目錄名稱或目錄 URL
切換至 FTP 伺服器新目錄呼叫 CFtpConnection::SetCurrentDirectory進入 FTP 伺服器新目錄
尋找第一個檔案使用 CFtpFileFind::FindFile尋找第一個檔案,未找到回傳 FALSE
尋找下一個檔案使用 CFtpFileFind::FindNextFile尋找下一個檔案,未找到回傳 FALSE
刪除找到的檔案呼叫 CFtpConnection::Remove,參數為檔名刪除指定檔案
異常處理使用 CInternetException 類別處理所有常見 Internet 異常
結束 FTP Session處理 CInternetSession 物件自動清理開啟的控制代碼與連線

表四:典型 HTTP 客戶端應用程式步驟

目的方法結果
開始 HTTP 會話,建立 HTTP 連線建立 CInternetSession,呼叫 GetHttpConnection初始化 WinInet 並連接伺服器,回傳 CHttpConnection 物件
建立 HTTP 請求呼叫 CHttpConnection::OpenRequest建立 CHttpFile 物件並回傳
發送 HTTP 請求呼叫 CHttpFile::AddRequestHeaders 及 SendRequest發送請求至伺服器
尋找檔案(同 FTP 流程)未找到回傳 FALSE
讀取檔案呼叫 CInternetFile::Read使用提供的緩衝區讀取指定位元組
取得 HTTP 請求資訊呼叫 CHttpFile::QueryInfo從伺服器取得 HTTP 要求標頭資訊
異常處理使用 CInternetException 類別處理所有常見 Internet 異常
結束 HTTP 會話處理 CInternetSession 物件自動清理開啟的控制代碼與連線

參考資源與範例程式

受限於篇幅,本文未提供完整範例程式碼。MSDN 提供兩個經典範例專案可供參考:FTPTREE(FTP 目錄樹瀏覽)與 TEAR(HTTP 內容擷取)。此外,以 "WinInet" 為關鍵字在 Google 搜尋也能找到大量 MFC WinInet 技術資料與社群分享的實作經驗。

進階開發提示

  • 非同步操作:善用 EnableStatusCallback 監控長時間傳輸進度
  • 錯誤處理:完整捕捉 CInternetException 並解析錯誤碼
  • Proxy 支援:透過 SetOption 設定 INTERNET_OPTION_PROXY 參數
  • SSL/HTTPS:WinInet 原生支援安全通訊協定,需正確設定連線旗標
  • 斷點續傳:結合 HTTP Range 標頭與檔案定位實現大檔案續傳
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved