一、概述
一个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的典型应用。
使用 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实现Internet客户端应用程序的具体步骤和细节。(待续)
源文档 <http://www.vckbase.com/document/viewdoc/?id=545>
分享到:
相关推荐
该文档介绍WinInet技术开发Internet客户端的相关知识,主要特点是使客户端开发变的比较容易
源代码 报告 可执行文件 利用诸如Java FTP Client Library 组件或VC6.0 WinInet基于国际互连网客户端应用设计接口的程序实现FTP客户端功能。
利用WinInet技术开发FTP客户端程序, FTP Internet服务器通讯.
MFC WinInet类实现FTP客户端功能MFC WinInet类实现FTP客户端功能MFC WinInet类实现FTP客户端功能MFC WinInet类实现FTP客户端功能MFC WinInet类实现FTP客户端功能
vs2019下使用winInet实现的http客户端。功能实现:实现get、post、post上传文件,basic认证
完整项目,编译平台VS2008。使用异步wininet实现的FTP客户端,并加入加入自动超时检测机制。在局域网环境可以占满网络带宽,可以在此基础进行二次开发。
利用WinInet技术 ,编写的基于MFC的FTP客户端。 实现了根目录下文件的上传、下载及删除操作,目录的操作有点问题就没完全实现,拿出来给大家共享一下,同时希望给与改进意见。 (Visual Studio 2010下测试。)
WinInet 是 Windows Internet 扩展应用程序高级编程接口,是专为开发具有 Internet 功能的客户端 应用程序而提供的。它有两种形式:WinInet API 包含一个 C 语言的函数集(Win32 Internet functions), MFC WinInet ...
WinInet Component Suite v1.6.rar
本文介绍了FTP客户端的完整功能的实现。
该实例通过WinInet编程接口实现了完整的FTP客户程序,其界面类似于CuteFTP和LeapFTP 下载后运行时要配置一下编译环境 工程->设置->常规(使用MFC作为静态链接库) 其它问题可以从网上查到 如果还编译不过 可以直接...
VC编程实现使用WinInet通过HTTP协议读取网上文件,成功实现,在visual studio 2005下可用
WinInet编程中如何使用异步 winInet_API浅谈 Wininet详解 WinInet中的几个网络函数 WinInet学习笔记 异步下载类 等等
使用WinInet来获取腾讯气象网站的数据来做的客户端天气预报软件, 代码讲解博客地址:http://www.gymsaga.com/project/737.html 更多程序开发及MFC教程,请继续关注郭延明个人博客
wininet组件,用于通过pb\vb\delphi\.net\java等工具调用,发送邮件
利用WinInet实现文件下载 利用WinInet实现文件下载 利用WinInet实现文件下载 利用WinInet实现文件下载
wininet上传文件到ftp服务器,代码量很少,已测试成功,使用到项目中。
Wininet详解,介绍wininet,用以开发设计。介绍了所有wininet相关的知识。
这个是一个用Wininet实现下载功能的代码(绝对源代码).希望对大家有好的帮助!(vs2005测试通过的),大家可以放心使用!
Delphi用WinInet实现服务器信息获取、上传Json信息、文件下载