分享
 
 
 

网络编程--WININET

王朝system·作者佚名  2006-04-14
窄屏简体版  字體: |||超大  

一个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 的一般流程为:

图一

下表描述了一个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 api函数列表

Platform SDK: Windows Internet

WinINet Functions

The following are the WinINet functions.

CommitUrlCacheEntry

CreateMD5SSOHash

CreateUrlCacheEntry

CreateUrlCacheGroup

DeleteUrlCacheEntry

DeleteUrlCacheGroup

DetectAutoProxyUrl

FindCloseUrlCache

FindFirstUrlCacheEntry

FindFirstUrlCacheEntryEx

FindFirstUrlCacheGroup

FindNextUrlCacheEntry

FindNextUrlCacheEntryEx

FindNextUrlCacheGroup

FtpCommand

FtpCreateDirectory

FtpDeleteFile

FtpFindFirstFile

FtpGetCurrentDirectory

FtpGetFile

FtpGetFileSize

FtpOpenFile

FtpPutFile

FtpRemoveDirectory

FtpRenameFile

FtpSetCurrentDirectory

GetUrlCacheEntryInfo

GetUrlCacheEntryInfoEx

GetUrlCacheGroupAttribute

GopherAttributEnumerator

GopherCreateLocator

GopherFindFirstFile

GopherGetAttribute

GopherGetLocatorType

GopherOpenFile

HttpAddRequestHeaders

HttpEndRequest

HttpOpenRequest

HttpQueryInfo

HttpSendRequest

HttpSendRequestEx

InternetAttemptConnect

InternetAutodial

InternetAutodialHangup

InternetCanonicalizeUrl

InternetCheckConnection

InternetCloseHandle

InternetCombineUrl

InternetConfirmZoneCrossing

InternetConnect

InternetCrackUrl

InternetCreateUrl

InternetDeInitializeAutoProxyDll

InternetDial

InternetErrorDlg

InternetFindNextFile

InternetGetConnectedState

InternetGetConnectedStateEx

InternetGetCookie

InternetGetCookieEx

InternetGetLastResponseInfo

InternetGetProxyInfo

InternetGoOnline

InternetHangUp

InternetInitializeAutoProxyDll

InternetLockRequestFile

InternetOpen

InternetOpenUrl

InternetQueryDataAvailable

InternetQueryOption

InternetReadFile

InternetReadFileEx

InternetSetCookie

InternetSetCookieEx

InternetSetDialState

InternetSetFilePointer

InternetSetOption

InternetSetOptionEx

InternetSetStatusCallback

InternetStatusCallback

InternetTimeFromSystemTime

InternetTimeToSystemTime

InternetUnlockRequestFile

InternetWriteFile

ReadUrlCacheEntryStream

ResumSuspendedDownload

RetrieveUrlCacheEntryFile

RetrieveUrlCacheEntryStream

SetUrlCacheEntryGroup

SetUrlCacheEntryInfo

SetUrlCacheGroupAttribute

UnlockUrlCacheEntryFile

UnlockUrlCacheEntryStream

The following functions are the WinInet Privacy and Security functions:

InternetClearAllPerSiteCookieDecisions

InternetEnumPerSiteCookieDecisions

InternetGetPerSiteCookieDecisions

InternetSetPerSiteCookieDecisions

InternetGetZonePreferenceW

InternetSetZonePreferenceW

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有