`
yingyingol
  • 浏览: 746280 次
文章分类
社区版块
存档分类
最新评论

WinInet开发

 
阅读更多
一、概述(Internet Programming with WinInet)

WinInet开发Internet客户端应用

一个Internet客户端程序的目的是通过Internet协议如:Gopher, FTP, or HTTP来存取网络数据源(服务器)的信息。一个Internet客户端程序可以访问服务器获得象天气预报,股票价格、重要新闻数据。Internet客户端程序可以通过外部网络(Internet)或内部网络(一般为Intranet)访问服务器。

MFC类库包含 Win32 Internet 扩展接口,也就是WinInet,专门用于Internet客户端程序。MFC将WinInet封装在一个标准的、易于使用的类集合中。在编写WinInet客户端程序时,你既可以直接调用win32函数,也可以使用WinInet类库。

Win32 Internet 扩展提供了对普通Internet协议的访问,这些协议包括:gopher, FTP,和 HTTP,使用WinInet可以编写出高水平的Internet客户端程序,而不必去了解winsock、TCP/IP和特定Internet协议的细节。WinInet为所有三种协议提供了统一的函数集,既Win32 API接口。如果底层协议改变(如从FTP到HTTP),利用统一的函数集,用最少的代码就可以完成改变。
Visual C++ 有两种方式来使用WinInet。一种是直接调用Win32 Internet函数,另一种是使用WinInet类库。

MFC对WinInet的封装,向类库开发人员提供熟悉的上下文。MFC提供三个由CStdioFile派生的类:CInternetFile、 CHttpFile 和 CGopherFile,对使用过CStdioFile类操作和处理本地文件的开发人员来说,这些类不仅使得获取和处理Internet数据驾轻就熟,而且使得处理本地数据和Internet数据的方式一致透明,数据的存储位置已经不重要了。

MFC WinInet 类有如下优点:
缓冲器输入输出--------Buffered I/O
安全的数据处理--------Type-safe handles for your data
众多函数带缺省参数----Default parameters for many functions
普通Internet错误的异常处理--Exception handling for common Internet errors.
自动清除打开的句柄和连接-Automatic cleanup of open handles and connections

MFC 提供了下列的类和全程函数来创建Internet客户端程序。
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文件里声明。

二、方法与技巧(Tips & Knacks)
客户端的用户要实现某些行为,必须具备先决条件(如读取文件,就必须先建立一个Internet连接)。下表以MFC为例,列出了一般的Internet URL (FTP, Gopher, or HTTP)客户端行为要实现某个目标所必须使用的方法。

实现

方法

建立一个连接 创建CInternetSession对象,它是WinInet Internet客户应用的基础
打开一个URL 建立一个连接,调用CInternetSession::OpenURL
函数,返回一个只读资源对象
读取 URL 数据 打开一个URL,调用CInternetSession::QueryOption
Query Internet 选项设置 建立一个连接,调用CInternetFile::Read
设置Internet选项 建立一个连接,调用CInternetSession::SetOption
设置一个函数获取状态信息 建立一个连接,调用CInternetSession::EnableStatusCallback
重写CInternetSession::OnStatusCallback函数

FTP

实现

方法

建立一个FTP连接 创建CInternetSession对象,它是WinInet Internet客户应用的基础。调用CInternetSession::GetFtpConnection
创建CFtpConnection对象
Find第一个资源 建立一个FTP连接,创建一个CFtpFileFind对象
OpenURL函数返回一个只读资源对象
调用CFtpFileFind::FindFile
枚举所有可获得的资源 Find下一个资源,调用CFtpFileFind::FindNextFile
直到返回FALSE
打开一个FTP文件 建立一个FTP连接,调用CFtpConnection::OpenFile
创建并打开一个CInternetFile对象
读取FTP文件 以读方式打开FTP文件,调用CInternetFile::Read
写FTP文件 以写方式打开FTP文件,调用CInternetFile::Write重写CInternetSession::OnStatusCallback
改变客户端在服务器上的目录 建立一个FTP连接,调用CFtpConnection::SetCurrentDirectory
获取客户端在服务器上的当前目录 建立一个FTP连接,调用CFtpConnection::GetCurrentDirectory
   

HTTP

实现

方法

建立一个HTTP连接 创建CInternetSession对象,它是WinInet Internet客户应用的基础。调用CInternetSession::GetHttpConnection
创建CHttpConnection对象
打开一个HTTP文件 建立一个HTTP连接,调用CHttpConnection::OpenRequest
创建一个CHttpFile对象,
调用CHttpFile::AddRequestHeaders
调用CHttpFile::SendRequest
读取一个HTTP文件 打开HTTP文件,调用CInternetFile::Read
获取HTTP请求信息 建立一个HTTP连接,调用CHttpConnection::OpenRequest
创建一个CHttpFile对象
调用CHttpFile::QueryInfo

GOPHER

实现

方法

建立一个gopher连接 创建CInternetSession对象,它是WinInet Internet客户应用的基础。调用CInternetSession::GetGopherConnection
创建CGopherConnection对象
在当前目录中Find第一个文件 建立一个gopher连接,
创建一个CGopherFileFind对象,
调用CGopherConnection::CreateLocator
创建一个CGopherLocator对象,
传递locator到CGopherFileFind::FindFile.
如果需要,调用CGopherFileFind::GetLocator
获取文件的locator
枚举所有可获得的资源 Find下一个资源,调用CFtpFileFind::FindNextFile
直到返回FALSE
打开一个gopher文件 建立一个gopher连接,调用CFtpConnection::OpenFile
调用CGopherConnection::CreateLocator创建一个
gopher locator或者用CGopherFileFind::GetLocator
find一个locator
调用CGopherConnection::OpenFile.
读取gopher文件 打开gopher文件,调用CInternetFile::Read
使用CGopherFile

每一个Internet client application的基础是Internet session。MFC将Internet session作为CInternetSession类的对象来实现。使用这个类,你可以创建一个或几个并发的CInternetSession类对象。

为了与服务器通讯,你不仅需要CInternetSession对象,还需要一个CInternetConnection对象。你可以通过CInternetSession::GetFtpConnection,
CInternetSession::GetHttpConnection, 或CInternetSession::GetGopherConnection 来创建相应协议的CInternetConnection对象。这些调用并不存取服务器上的文件。如果你要读写服务器上的数据,必须在另外单独的步骤中打开文件。

对于大多数Internet sessions,CInternetSession对象一般都与一个CInternetFile对象肩并肩地工作。

对于一个Internet sessions,你必须创建一个CInternetSession实例。

如果你的Internet session要读写数据,你必须创建一个CInternetFile实例,或者其子类 CHttpFile,CGopherFile的实例。读数据最容易的方式是:调用CInternetSession::OpenURL。这个函数解析你提供的URL,打开一个到URL服务器的连接,并返回一个只读的CInternetFile对象,CInternetSession::OpenURL不用指定协议类型,那种协议(FTP, HTTP, gopher)都行。CInternetSession::OpenURL甚至可以操作本地文件(返回一个CStdioFile,而不是CInternetFile)。

如果你的Internet session不读写数据,而是实现其它任务,如在一个FTP目录中删除一个文件,你可以不必创建CInternetFile实例。

有两种方式来创建CInternetFile对象:
第一种:使用CInternetSession::OpenURL建立服务器连接,这个调用返回一个
CInternetFile对象。

第二种:use CInternetSession::GetFtpConnection, GetGopherConnection, 或
GetHttpConnection建立服务器连接,你必须调用CFtpConnection::OpenFile,
CGopherConnection::OpenFile, 或 CHttpConnection::OpenRequest,相应地返回
一个CInternetFile, CGopherFile, 或 CHttpFile对象,

在实现Internet client application时,你要判断是创建一个基于OpenURL的一般的Internet client,还是使用GetConnection函数之一创建一个指定协议的Internet client,根据这种判断,用不同的步骤来实现Internet client application。

下表显示了实现一个典型的Internet client application的步骤:


目的 方法 结果
开始一个
Internet session
创建一个 CInternetSession对象 初始化WinInet,并联接服务器
读或设置一个InternetQuery option
(如超时或重试次数)
CInternetSession::SetOption 不成功返回FALSE
建立回调函数监视session状态 用CInternetSession::EnableStatusCallback 建立回调函数CInternetSession::OnStatusCallback,重写OnStatusCallback,创建自己的回调例程
Internet服务器Intranet服务器或本地文件 用CInternetSession::OpenURL 解析并打开到指定服务器的连接,返回CStdioFile(如果你传递的OpenURL是本地文件名)或CInternetFile对象,通过存取这个对象,获得服务器或文件的数据
读文件  用CInternetFile::Read 用你提供的Buffer读指定的
字节数
异常处理 用CInternetException类          处理所有普通的Internet
异常类型
结束Internet session       处理CInternetSession对象  自动清除打开的句柄的连接

三、HTTP应用实现步骤:

下表显示了实现一个典型的HTTP client application的步骤:

目的 方法 结果
开始一个HTTP session 创建一个 CInternetSession对象 初始化WinInet并联接服务器
连接到一个HTTP Server 用CInternetSession::GetHttpConnection 返回一个CHttpConnection对象
打开一个HTTP 请求 用CHttpConnection::OpenRequest 返回一个CHttpFile对象
发送一个HTTP 请求 用CHttpFile::AddRequestHeaders 并且用CHttpFile::SendRequest Find一个文件
如果文件没找到返回FALSE
读文件 用CHttpFile 使用你提供的缓冲读指定的字节
异常处理 用CInternetException类  处理所有普通的Internet异常类型
结束HTTP session 处理CInternetSession对象 自动清除打开的句柄的连接

四、FTP应用实现步骤:

下表显示了实现一个典型的FTP client application的步骤:

目的 方法 结果
开始一个FTP session 创建一个CInternetSession对象 初始化WinInet
并联接服务器
连接到一个FTP Server 用CInternetSession::GetFtpConnection 返回一个CFtpConnection对象
CD到 FTP 服务器的一个新目录 用CFtpConnection::SetCurrentDirectory CD到FTP服务器的一个
新目录
Find 第一个FTP目录中的文件 用CFtpFileFind::FindFile Find第一个文件,如果文件每找到返回FALSE
Find 下一个FTP目录中的文件 用CFtpFileFind::FindNextFile Find下一个文件
如果文件没找到返回FALSE
打开FindFile或FindNextFile找到的文件(用于读写) 用CFtpConnection::OpenFile,用FindFile或FindNextFile返回的文件名 打开FindFile或FindNextFile找到的文件(用于读写),返回一个CInternetFile对象
读写文件 用CInternetFile::Read或CInternetFile::Write 使用你指定的缓冲写
指定的字节数
异常处理 用CInternetException类  处理所有普通的Internet异常类型
结束FTP session 处理CInternetSession对象 自动清除打开的句柄的连接

下表显示了实现一个典型的删除文件FTP应用的步骤:

目的 方法 结果
开始一个FTP session 创建一个CInternetSession对象 初始化WinInet
并联接服务器
连接到一个FTP Server 用CInternetSession::GetFtpConnection 返回一个CFtpConnection对象
Check你是在正确的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对象 自动清除打开的句柄的连接

五、Gopher 应用实现步骤:

下表显示了实现一个典型的gopher应用的步骤:

目的 方法 结果
开始一个gopher session 创建一个CInternetSession对象 初始化WinInet
并联接服务器
连接到一个gopher Server 用CInternetSession::GetGopherConnection 返回一个CGopherConnection对象
Find 第一个gopher目录中的文件 用CGopherFileFind::FindFile Find第一个文件,如果文件每找到返回FALSE
Find 下一个gopherP目录中的文件 用CGopherFileFind::FindNextFile Find下一个文件
如果文件没找到返回FALSE
打开FindFile或FindNextFile(用于读操作) 用CGopherFileFind::GetLocator获得一个gopher locatorCGopherConnection::OpenFile打开gopher locator指定的文件 打开FindFile或FindNextFile
找到的文件找到的文件,OpenFile返回一个CGopherFile对象
用你提供的gopher locator打开一个文件 用CGopherConnection::CreateLocator创建一个gopher locator用CGopherConnection::OpenFile 打开gopher locator指定的文件,OpenFile返回一个CGopherFile对象
读文件 用CGopherFile 使用你提供的缓冲读指定的字节
异常处理 用CInternetException类  处理所有普通的Internet异常类型
结束gopher session 处理CInternetSession对象 自动清除打开的句柄的连接
分享到:
评论

相关推荐

    WinInet开发Internet客户端

    该文档介绍WinInet技术开发Internet客户端的相关知识,主要特点是使客户端开发变的比较容易

    VC++文件下载(仿搜狗下载)

    采用 vs2008基于wininet开发的一款仿搜狗下载的vc++版的文件下载程序。对学习VC++,MFC 的很有帮助。 采用 vs2008基于wininet开发的一款仿搜狗下载的vc++版的文件下载程序。对学习VC++,MFC 的很有帮助。 采用 vs...

    WinInet.rar

    在vc6下自带的WinInet.h头文件中未定义FtpCommand和FfpGetFileSize函数,所以通过WinInet开发Ftp上传与下载程序将会遇到问题 通过Microsoft Platform SDK Febrary 2003版中的更新WinInet.h和WinInet.lib文件可以解决...

    闻怡洋VC专题教程ActiveX控件开发 进程/线程控制 文件操作 内存管理

    |------ 1.4 利用WinInet开发Internet程序 +-- 第二章 ActiveX控件开发 |------ 2.1 ActiveX控件介绍 |------ 2.2 利用MFC开发ActiveX控件 |------ 2.3 利用ATL(ActiveX模板库)创建ActiveX控件 |------ 2.4 调试...

    VC专题教程

    VC专题教程 -- 第一章 Internet相关开发 打包下载 ------ 1.1 如何编写CGI程序 ------ 1.2 一种更亲切的CGI开发系统WinCGI ------ 1.3 利用ISAPI开发CGI程序 ------ 1.4 利用WinInet开发Internet程序 +-- 第二章 ...

    实验7-WinInet 与多线程编程

    WinInet 是 Windows Internet 扩展应用程序高级编程接口,是专为开发具有 Internet 功能的客户端 应用程序而提供的。它有两种形式:WinInet API 包含一个 C 语言的函数集(Win32 Internet functions), MFC WinInet ...

    利用WinInet技术开发FTP客户端程序

    利用WinInet技术开发FTP客户端程序, FTP Internet服务器通讯.

    MFC专题讲座

    ------ 1.4 利用WinInet开发Internet程序 +-- 第二章 ActiveX控件开发 |------ 2.1 ActiveX控件介绍 |------ 2.2 利用MFC开发ActiveX控件 |------ 2.3 利用ATL(ActiveX模板库)创建ActiveX控件...

    Wininet详解

    Wininet详解,介绍wininet,用以开发设计。介绍了所有wininet相关的知识。

    WinInet之获取天气预报

    使用WinInet来获取腾讯气象网站的数据来做的客户端天气预报软件, 代码讲解博客地址:http://www.gymsaga.com/project/737.html 更多程序开发及MFC教程,请继续关注郭延明个人博客

    vs2019下使用winInet实现的http客户端

    vs2019下使用winInet实现的http客户端。功能实现:实现get、post、post上传文件,basic认证

    实验五:定制开发自己的浏览器

    1.利用CHtmlView类的功能,配合使用WinInet提供的接口开发一个浏览器; 2.实现一个浏览器的基本功能,能够查看网页; 3.能够实现浏览器的主页、前进、后退、刷新等功能; 4.能够利用WinInet功能实现查看源码的功能。

    Visual C++6.0网络编程技术

    内容主要包括:Internet网络编程方面的基础知识、Sockets套接字、Visual C++开发工具的使用、Casync Socket类和CSocket类、Winsock库函数参考、Sockets、MAPI和Internet、WinInet类库的网络开发、WinInet开发的具体...

    ftp文档应用软件网络编程的支持有socket支持,WinInet支持,MAPI和ISAPI支持等。其中,Windows Sockets API

    VC++对网络编程的支持有socket支持,WinInet支持,MAPI和ISAPI支持等。其中,Windows Sockets API是TCP/IP网络环境里,也是Internet上进行开发最为通用的API。最早美国加州大学Berkeley分校在UNIX下为TCP/IP协议开发...

    Wininet 异步FTP客户端组件及示例程序全套源码

    完整项目,编译平台VS2008。使用异步wininet实现的FTP客户端,并加入加入自动超时检测机制。在局域网环境可以占满网络带宽,可以在此基础进行二次开发。

    Qt界面开发,使用WinINet 函数实现 FTP资源上传下载等操作案例的可执行程序,非源码!Qt案例

    Qt开发界面使用WinINet 函数实现 FTP资源上传下载等操作案例的可执行程序,非源码 Qt 版本 5.13.1 | MSVC 2017 64 编译器 | WinlNet库 整个示例功能代码参考于FTP会话 大部分都是原来的代码,只是和QT进行了数据格式...

    基于WinInet实现HTTP文件上传小程序

    把基于WinInet的HTTP文件上传功能小程序的开发过程首先,使用 InternetCrackUrl 函数分解URL,从URL中提取网站的域名、路径以及URL的附加信息等。关于 InternetCrackUrl 分解URL的介绍和实现,可以参考 “URL分解之...

    易语言WinInet模块源码.zip易语言项目例子源码下载

    易语言WinInet模块源码.zip易语言项目例子源码下载易语言WinInet模块源码.zip易语言项目例子源码下载 1.合个人学习技术做项目参考 2.适合学生做毕业设计参考 3.适合小团队开发项目参考

    VB网络编程实例

    ◆ 130.htm RAS API上的其他Function ◆ 131.htm VB + API 获取 IE 的 “代理服务器” 配制 ◆ 132.htm vb调用winInet API接口post数据到指定的url ◆ 133.htm vb开发通信软件 ◆ 134....

    Windows网络编程第二版

    与Visual C++捆绑的MFC提供了大量封装良好的网络类,如Winsock、WinInet、ActiveX、DCOM和ATL等,提高了用户在利用Visual C++进行网络开发时的效率。本书主要特色在于对技术细节做了深入的介绍,探讨了大量网络专用...

Global site tag (gtag.js) - Google Analytics