`
jian0487
  • 浏览: 94487 次
  • 性别: Icon_minigender_1
  • 来自: 宁德
社区版块
存档分类
最新评论

网络编程--WININET

阅读更多

 

一个Internet客户端程序的目的是通过Internet协议如:HTTPFTP等来存取网络数据源(服务器)的信息。客户端程序可以访问服务器获得象天气预报,股票价格、重要新闻数据,甚至是与服务器交换信息。Internet客户端程序可以通过外部网络(Internet)或内部网络(一般为Intranet)访问服务器。
   
为了开发Internet客户端程序。MFC类库提供了专门的 Win32 Internet 扩展接口,也就是WinInetMFCWinInet封装在一个标准的、易于使用的类集合中。在编写WinInet客户端程序时,你既可以直接调用Win32函数,也可以使用WinInet类库。
    Win32 Internet
扩展提供了对普通Internet协议的访问,这些协议包括:HTTPFTPGopherGopher已经渐渐淡出。借助于WinInet编程接口,开发人员不必去了解WinsockTCP/IP和特定Internet协议的细节就可以编写出高水平的Internet客户端程序。WinInet为所有几种协议(HTTPFTPGopher)提供了统一的函数集,也就是Win32 API接口。利用这些统一的函数集,大大简化了针对HTTPFTP等协议的编程,从而轻松地将Internet集成到自己的应用程序中。底层协议的转换(如从FTPHTTP)只要对源代码稍作修改就可以完成。
   
Visual C++工程中提供有两种方式来使用WinInet。一种是直接调用Win32 Internet函数,另一种是使用WinInet类库。
    MFC
WinInet的封装是通过提供三个由CStdioFile派生类实现的。这三个派生类是:CInternetFile CHttpFile CGopherFile。由于Gopher协议已经很少使用,所以本文将不再对CGopherFile进行讨论。对开发人员来说,不管你以前是否用过CStdioFileWinInet都是很好理解并且易于使用的。它使得存取Internet数据易如反掌,使得Internet数据和本地数据的处理一致透明,数据的存储位置已经不再重要。

MFC WinInet
类有如下优点:

<!--[if !supportLists]-->·       <!--[endif]-->缓冲器输入输出

<!--[if !supportLists]-->·       <!--[endif]-->数据的类型安全处理

<!--[if !supportLists]-->·       <!--[endif]-->许多函数的参数都是缺省值

<!--[if !supportLists]-->·       <!--[endif]-->对普通的Internet错误进行异常处理

<!--[if !supportLists]-->·       <!--[endif]-->自动清除打开的句柄和连接

使用 WinInet 提供的API函数,你可以:

<!--[if !supportLists]-->·       <!--[endif]-->通过HTTP协议下载HTML页,HTTP协议是专门用于在服务器和客户浏览器之间传输HTML页。

<!--[if !supportLists]-->·       <!--[endif]-->发送FTP请求上传或下载文件以及获取服务器的目录信息。通过匿名登陆下载文件便是FTP的典型应用。

<!--[if !supportLists]-->·       <!--[endif]-->其它基于HTTPFTP协议的应用。

使用 WinInet 的一般流程为:

<!--[if !vml]--><!--[endif]-->建立连接——>发出请求——>关闭连接


下表描述了一个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   

    这些类和全程函数除CFileFindAFX.H里声明之外,其余都在AFXINET.H文件里声明。它们对HTTPFTPGopher等协议进行了高度抽象,形成了一套高级API函数。 利用这些API可以快速直接地开发Internet应用。例如,连接到FTP服务器一般需要几个步骤,而且需要做一些底层处理。但使用上述的MFC类提供的API,只需要对CInternetSession::GetFTPConnection进行一次调用,便可以轻松建立连接。
   
大家知道,每一个Internet应用其数据交换都是建立在Internet会话(Session)的基础之上的,MFC是通过CInternetSession类对象来实现Internet会话的。用这个类不仅可以创建会话,而且可以创建几个并发的Internet会话。
   
为了与服务器进行通讯,除了要创建CInternetSession对象之外,还必须创建CInternetConnection对象,针对不同的协议,CInternetConnection对象有三种类型:

<!--[if !supportLists]-->·       <!--[endif]-->CInternetSession::GetFtpConnection

<!--[if !supportLists]-->·       <!--[endif]-->CInternetSession::GetHttpConnection

<!--[if !supportLists]-->·       <!--[endif]-->CInternetSession::GetGopherConnection

这些函数调用并不会读写服务器上的文件。如果你想要读写数据,必须要打开文件才能操作。其处理流程应该是这样的:

<!--[if !supportLists]-->·       <!--[endif]-->首先创建 CInternetSession 对象实例

<!--[if !supportLists]-->·       <!--[endif]-->如果创建的Session要读写文件,则必须创建 CInternetFile 对象实例(或者是它的子类CHttpFileCGopherFile 对象实例)。其实,读取数据最容易的方式是调用 CInternetSession::OpenURL函数。 这个函数解析你提供的统一资源定位符(URL),然后打开与URL指定的服务器连接,同时返回一个只读的CInternetFile对象。CInternetSession::OpenURL不针对特定的协议类型——不管是FTP还是HTTP都可以调用,它甚至可以处理本地文件,此时返回的是CStdioFile,而不是CInternetFile  

<!--[if !supportLists]-->·       <!--[endif]-->如果创建的Session不读写文件,而是要实现其它的任务,如删除某个FTP目录下的文件等,则你不需要创建CInternetFile实例。

创建CInternetFile对象的方法有两种:

<!--[if !supportLists]-->·       <!--[endif]-->如果用CInternetSession::OpenURL建立与服务器的连接,调用返回CStdioFile

<!--[if !supportLists]-->·       <!--[endif]-->如果用CInternetSession::GetFtpConnectionGetGopherConnection或者CHttpConnection::OpenRequest建立与服务器的连接,你必须调用相应的CFtpConnection::OpenFileCGopherConnection::OpenFile或者CHttpConnection::OpenRequest,返回的内容也与CInternetFileCGopherFile或者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

分享到:
评论

相关推荐

    实验7-WinInet 与多线程编程

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

    网络 网络编程 Socket WinInet 网络课件

    网络 网络编程 Socket WinInet 网络课件 值得下载!!!

    WinInet编程

    微软的http等三个协议的网络编程类库 了解一下还是很用的喔

    Wininet编程资料及代码

    WinInet编程中如何使用异步 winInet_API浅谈 Wininet详解 WinInet中的几个网络函数 WinInet学习笔记 异步下载类 等等

    网络编程中的WinInet典型例子

    这是我学习网络编程中遇到的用MFC 对WinInet类编程的一个很典型也很不错的例子,希望对正在学校网络编程的爱好者有所帮助

    网络编程实用教程(程序源代码).zip

    全书分为10章,第1章介绍网络编程的基本概念及模式,第2章介绍套接字网络编程基础,第3章介绍Windows环境的WinSock编程基础,第4章介绍MFC编程,第5章介绍MFC WinSock类的编程,第6章介绍WinInet编程,第7章介绍...

    网络编程实用教程(第三版).zip

    1.1 网络编程相关的基本概念 1 1.1.1 网络编程与进程通信 1 1.1.2 Internet中网间进程的标识 3 1.1.3 网络协议的特征 7 1.2 三类网络编程 10 1.2.1 基于TCP/IP协议栈的网络编程 10 1.2.2 基于WWW应用的...

    windows网络编程技术-中文版

    Microsoft公司的Visual C++平台不仅具有很强的网络程序处理能力,而且还能提供多种编程风格。与Visual C++捆绑的MFC提供了大量...对于需要进行Windows网络编程的人员来说,本书极具参考价值,是一本不可多得的参考书。

    《Windows网络编程技术》高清PDF版+随书源码

    高级网络编程6.1 简单MFC网络编程6.1.1 网络聊天应用实例6.1.2 MFC基本框架与接口6.1.3 网络应用实例的实现6.2 基于MFC Socket类编程6.2.1 CAsyncSocket类和CSocket类6.2.2 网络应用实例功能介绍6.2.3 网络应用实例...

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

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

    WINDOWS网络编程技术.pdf

    高级网络编程6.1 简单MFC网络编程6.1.1 网络聊天应用实例6.1.2 MFC基本框架与接口6.1.3 网络应用实例的实现6.2 基于MFC Socket类编程6.2.1 CAsyncSocket类和CSocket类6.2.2 网络应用实例功能介绍6.2.3 网络应用实例...

    Windows网络编程

    4079.3 多媒体通信与常规服务质量 4129.3.1 背景知识 4129.3.2 QOS和Winsock 4169.3.3 QOS中止 4219.3.4 QOS编程 4299.3.5 语音全双工通信 4349.4 小结 450第10章 WinInet API开发 45110.1 WinInet与Winsock...

    VB网络编程实例

    ◆ 144.htm WebClass实现动态WEB编程之理论篇 ◆ 145.htm Winsocket网络编程谈 ◆ 146.htm Winsock编程框架 ◆ 147.htm Winsock错误代码一览表 ◆ 148.htm 程式自动呼叫拨号网络(RAS API) ...

    网络编程实用教程

    网络通信编程基本概念和编程模式 UNIX套接字编程 Sockets规范 WinInet API和MFC WinInet类 Win32的多进程机制 5种套接字I/O模型 电子邮件系统的构成和工作原理

    Visual C++6.0网络编程技术

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

    中软吉大网络协议仿真系统

    ◆网络编程实验 实验 25 网络程序设计-1:Ping实现(原始套接字) 实验 26 网络程序设计-2:聊天工具(套接字UDP) 实验 27 网络程序设计-3:文件传输工具(套接字TCP) 实验 28 网络程序设计-4:主机信息获取工具...

    Windows网络编程第二版

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

    Visual C++网络通信编程实用案例精选_9(全)

    本书是一本介绍利用Visual C++进行网络通信程序开发的书籍,书中精选了大量网络实例,涵盖了本地计算机网络编程,局域网网络通信编程,IE编程,网络通信协议编程,串口通信编程,代理服务器编程和高级网络通信编程。...

Global site tag (gtag.js) - Google Analytics