版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、1,第14章 開發(fā)Internet應用程序,Internet應用程序的開發(fā)通常包括Internet服務端和客戶端的應用程序, Microsoft提供了大量的API函數(shù)來支持這兩種程序,客戶端應用程序主要通過Internet協(xié)議(如Gopher,FTP,HTTP等)來從網(wǎng)絡服務器上獲取數(shù)據(jù),提供訪問Internet的功能,服務器端應用程序則用來支持HTTP、FTP或Gopher等類型的服務,2,14.1 Internet應用程序開發(fā)的幾種類型,使用WinInet類開發(fā)Internet應用程序:WinInet類支持HTTP、FTP和Gopher等標準的協(xié)議,使用Windows Socket開發(fā)In
2、ternet應用程序:Winsock標準定義了一個DLL接口來連接Internet,MFC使用CAsyncSocket和CSocket類對接口進行了封裝。,使用消息收發(fā)API(MAPI:Message API) 開發(fā)Internet應用程序:使用MAPI可以很方便的向其他應用程序發(fā)送電子郵件、語音郵件或傳真等功能,3,14.2 WinInet開發(fā)簡介,用WinInet開發(fā)程序的優(yōu)點,隱藏協(xié)議細節(jié),簡化編程:可不必深入了解協(xié)議,而使用WinSocket編程,需理解網(wǎng)絡通信及協(xié)議基本原理,熟悉的編程接口:WinInet API函數(shù)和很多WinAPI函數(shù)很相似,這對有編程經(jīng)驗的程序員來說是很方便的。
3、,穩(wěn)定性好,不要求程序與底層直接聯(lián)系:WinInet隱藏了協(xié)議的具體細節(jié),使得程序不必直接使用各種協(xié)議,支持數(shù)據(jù)緩存:WinInet函數(shù)為所有的協(xié)議提供緩存能力,程序員只需關心數(shù)據(jù)而不用去管理數(shù)據(jù)緩存,支持多線程:由于WinInet函數(shù)在內(nèi)部處理多線程的并發(fā)問題,因此WinInet函數(shù)支持多線程,在多線程中可以調(diào)用各種WinInet函數(shù)而不用擔心發(fā)生問題或死鎖,4,14.3 WinInet類介紹,WinInet類是一個總稱,目前的版本中分為四組 CInternetSession類 CInternetConnection (連接類) CFileFind類(Internet文件查找類) CInte
4、rnetFile類和CGopherLocator類,5,14.3.1 CInternetSession類,CInternetSession類直接繼承自CObject類,該類用來建立與某個Internet服務器的會話。還可以向代理服務器描述連接,如果應用程序所使用的Internet連接必須保持一段時間,則可以在CWinApp類中創(chuàng)建相應的CInternetSession成員,6,QueryOption提供一個可能的錯誤檢測判斷 SetOption設置Internet會話的選項 OpenURL設置URL,并對其進行分析 GetFtpConnection打開一個FTP會話并進行連接 GetHttpC
5、onnection打開HTTP服務器并進行連接 GetGopherConnection打開Gopher服務器并進行連接 EnableStatusCallback建立異步操作的狀態(tài)回調(diào) ServiceTypeFromHandle通過Internet句柄返回服務器類型 GetContext獲取Internet和應用程序會話句柄 Close關閉Internet連接,CInternetSession類成員函數(shù),7,14.3.2 CInternetConnection類,包括CInternetConnection類及其派生類CHttpConnection、CFtpConnection和CGopherCo
6、nnection類, 這些類幫助用戶管理與Internet服務器的連接,同時還提供一些函數(shù)完成和響應服務器的通信,8,CInternetConnection:用于管理與Internet服務器的連接 CFtpConnection:用于管理與FTP服務器的連接,可以對服務器上的文件和目錄進行直接操作 CGopherConnection:管理與Gopher服務器的連接 CHttpConnection:管理與HTTP服務器的連接,連接類及其派生類,9,14.3.3 CInternetFile類,包括CInternetFile類及其派生類CHttpFile、CGopherFile。這些類實現(xiàn)對遠程系統(tǒng)上
7、的文件的存取工作。 文件類還包含CFileFind類及其派生類CFtpFileFind、CGopherFileFind類。CFileFind類直接繼承于CObject類,這些類實現(xiàn)對本地和遠程系統(tǒng)上的文件的搜索和定位工作。,10,CInternetFile:允許對使用Internet協(xié)議的遠程系統(tǒng)中的文件進行操作 CGopherFile:為在Gopher服務器上進行文件檢索和讀取操作提供支持 CHttpFile:提供對HTTP服務器上的文件進行操作的支持 CFindFile:文文件檢索提供支持 CFtpFileFind:為在FTP服務器上進行的文件檢索操作提供支持 CGopherFileFin
8、d:為在Gopher服務器上進行的文件檢索操作提供支持,文件類說明,11,14.3.4 CGopherLocator類,在從Gopher服務器中獲取信息之前,必須先獲得該服務器的定位器,而CGopherLocator類的主要功能就是從Gopher服務器中得到定位并確定定位器的類型。,12,14.4 用WinInet類開發(fā)應用程序,編寫支持Internet的應用程序一般步驟: (1)創(chuàng)建一個CInternetSession對象:由于Internet會話是通過CInternetConection類的對象實現(xiàn)的,因此首先要創(chuàng)建一個CInternetSession對象,建立一個Internet會話。
9、(2)建立與服務器的連接:客戶應用程序要與服務器協(xié)同工作,在創(chuàng)建了CInternetSession對象后,就需要建立到服務器的連接。根據(jù)不同的協(xié)議,可選用GetFtpConnect、GetHttpConnect和GetGopherConnect三種方法中的一種。,13,(3)查詢或設置Internet選項:在連接時,有時還要查詢或設置Internet 選項,這個工作可以通過QueryOption或SetOption函數(shù)來完成。 (4)向用戶反饋當前數(shù)據(jù)處理的進程信息:有時客戶的應用程序在進行某些操作時,要耗費較長的時間,因此需要向用戶反饋當前的狀態(tài),這個工作由EnableStatusCallb
10、ack函數(shù)來完成,此時還要重載OnStatusCallBack函數(shù)以實現(xiàn)回調(diào)函數(shù)的功能。,14,(5)創(chuàng)建CInternetFile實例:調(diào)用CInternetSession類的成員函數(shù)OpenURL建立與服務器的連接,函數(shù)返回一個CInternetFile指針。 (6)文件讀寫操作:調(diào)用CInternetFile:Read或CInternetFile:Write函數(shù)對所得到得服務器文件進行讀寫操作。 (7)異常處理:為提高應用程序的可靠性和容錯性,必須對可能出現(xiàn)的問題進行處理,這種處理通常是通過調(diào)用CInternetException類的對象對目前可知的異常進行處理。 (8) 結束:調(diào)用CI
11、nternetSession:Close結束會話并銷毀CInternetSession對象。,15,14.5 WinInet類編程實例,【例14-1】利用WinInet類編寫Internet應用程序。在URL編輯框中寫入地址,單擊“Http”、“Ftp”或“Gopher”等按鈕可在編輯框中顯示查詢到的相應服務器的信息,編輯框1IDC_EDIT_URL 編輯框2IDC_EDIT_RESULT 下壓式按鈕IDC_BUTTON_HTTP 下壓式按鈕IDC_ BUTTON _FTP 下壓式按鈕IDC_ BUTTON _GOPHER 下壓式按鈕IDCANCEL 靜態(tài)文本IDC_STATIC 組框IDC_
12、STATIC,16,給界面對象連接接變量,17,(a) 給應用程序增加一個自定義的類,單擊InsertNew Class菜單,添加新類類名為CMyWinInetClass,系統(tǒng)會自動在項目中增加MyWinInetClass.cpp和MyWinInetClass.h兩個文件,18,(b)在新加入的類中增加如下三個public的成員函數(shù),在頭文件MyWinInetClass.h中可看到這些函數(shù)。 CString ConnectFtp(const CString sUrl); /完成連接Ftp功能的函數(shù) CString ConnectHttp(const CString sUrl); /完成連接Ht
13、tp功能的函數(shù) CString ConnectGopher(const CString sUrl); /完成連接Gopher功能的函數(shù),19,為了建立Internet的會話,新增加的CmyWinInetClass類中加入一個private型成員變量m_session: CInternetSession m_session; /建立Internet會話 由于在上面定義了一個CWinInet類的對象,所以還需要在MyWinInetClass.h頭文件中加入如下代碼: #include afxinet.h #include wininet.h,20,為CMyWinInetClass類添加三個用于連接
14、的成員函數(shù),它們分別是ConnectFtp、ConnectHttp和ConnectGopher。 CString CMyWinInetClass:ConnectFtp(const CString sUrl) CString sResult;/存儲連接信息的字符串 CFtpConnection *Ftpconnection=NULL; sResult=; sResult=sResult+Trying to connect Ftp sites+sUrl+rn; Ftpconnection=m_session.GetFtpConnection(sUrl); /建立到Ftp服務器的連接,21,if(F
15、tpconnection) sResult=sResult+Connection established.rn; CString sCurDir; Ftpconnection-GetCurrentDirectory(sCurDir); /得到Ftp服務器的當前目錄 sResult=sResult+current directory is+sCurDir+rn; Ftpconnection-Close();/關閉連接 else sResult=sResult+There are some errors in finding this Ftp sites; return sResult; ,22,
16、CString CMyWinInetClass:ConnectHttp(const CString sUrl) CString sResult; CInternetFile *hHttpFile=NULL; sResult=; sResult=sResult+Trying to connect Http sites+sUrl+rn; hHttpFile=(CInternetFile *)m_session.OpenURL(sUrl); /得到文件指針 if(hHttpFile) sResult=sResult+Connection established.rn; CString sLine;
17、while(hHttpFile-ReadString(sLine) /讀取Http服務器上的內(nèi)容sResult=sResult+sLine+rn; hHttpFile-Close();/關閉連接 else sResult=sResult+There are some errors in finding this Http sites; return sResult; ,23,CString CMyWinInetClass:ConnectGopher(const CString sUrl) CString sResult; CInternetFile *hGopherFile=NULL; sRe
18、sult=; sResult=sResult+Trying to connect Gopher sites+sUrl+rn; hGopherFile=(CInternetFile *)m_session.OpenURL(sUrl); /得到文件指針 if(hGopherFile) sResult=sResult+Connection established.rn; CString sLine; while(hGopherFile-ReadString(sLine) /讀取Gopher服務器內(nèi)容sResult=sResult+sLine+rn; hGopherFile-Close();/結束連接 else sResult=sResult+There are some errors in finding this Gopher sites; return sResult; ,24,在CMyInternetDlg類中增加一個public成員變量 CMyWinInetClass m_WinInetClass; 變量m_WinInetClass是CMyWinInetClass類的一個對象,所以還要在WinInetDlg.h頭文件加入自定義類的頭文件: #include MyWin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年海綿城市理念與土木工程設計
- 2026年媒介對電氣傳動控制的影響
- 2026春招:新興際華題庫及答案
- 2026春招:項目經(jīng)理真題及答案
- 2026春招:濰柴動力筆試題及答案
- 貨梯安全操作培訓內(nèi)容課件
- 貨柜安全檢查培訓心得
- 護理專業(yè)溝通技巧培訓
- 醫(yī)療器械質量與安全監(jiān)管
- 2026年德州職業(yè)技術學院高職單招職業(yè)適應性測試備考題庫有答案解析
- 國民經(jīng)濟行業(yè)分類代碼(2024年版)
- 2025屆央企校招筆試真題及答案
- 部隊防護基礎知識課件
- 軟裝代購合同協(xié)議
- 廣東省東莞市2024-2025學年高一上學期1月期末英語試題【含答案解析】
- 《景觀設計原理》課件
- 我國十大類再生廢品資源回收現(xiàn)狀和行情分析
- 2024北京朝陽四年級(上)期末數(shù)學(教師版)
- 2022版科學課程標準解讀-面向核心素養(yǎng)的科學教育(課件)
- 上海市靜安區(qū)2024屆高三二模語文試卷(解析版)
-
評論
0/150
提交評論