`
jian0487
  • 浏览: 96134 次
  • 性别: 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 网络课件

    WinInet是Microsoft提供的一种更高层次的网络编程接口,它简化了Web应用程序的开发过程。WinInet库包含了一系列的API函数,主要用于HTTP、HTTPS和FTP协议,使得开发人员能够轻松地实现浏览网页、上传下载文件等操作...

    Wininet编程资料及代码

    通过学习和实践WinInet API,开发者可以创建出高效、可靠的网络应用程序,特别是在处理大量网络请求和大文件传输时,异步编程的优势尤为明显。然而,随着技术的发展,开发者也应考虑探索更新的技术栈,以适应不断...

    精彩编程与编程技巧-CWinInetConnection---一个封装了WinInet API函数的类...

    `CWinInetConnection` 类为开发者提供了一个封装了 WinInet API 的高效工具,使得复杂的网络操作变得更为简单易用。通过本文对 `CWinInetConnection` 类的关键方法和属性的详细介绍,相信读者已经对该类有了较为全面...

    winInet 编程

    总之,winInet为Windows应用开发提供了一个简洁的网络编程接口,使得开发者能够快速实现基本的互联网功能。但要注意,它并不适合所有场景,特别是对性能和高级特性的需求。在实际项目中,根据具体需求选择合适的技术...

    Wininet编程 学习资料

    此外,错误处理和异常安全也是Wininet编程中不可忽视的部分,确保程序在遇到网络问题时能优雅地处理。 在学习过程中,你可能会遇到如下的挑战: - 多线程编程:在多线程环境中使用Wininet时,需要正确管理和同步...

    WinInet编程

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

    网络编程中的WinInet典型例子

    网络编程是计算机科学中至关重要的一环,特别是在分布式系统和互联网应用中。WinInet是Microsoft提供的一种API,用于简化Windows应用程序的Internet访问。这个典型的WinInet例子在MFC(Microsoft Foundation Classes...

    网络编程实用教程(程序源代码).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网络编程的人员来说,本书极具参考价值,是一本不可多得的参考书。

    wininet-get-.zip_InternetOpen_InternetOpenUrl_internetreadfile

    在Windows编程领域,WinINet库提供了一组API接口,用于实现基本的互联网访问功能,如HTTP、FTP和Gopher协议。在这个特定的场景中,我们关注的是`InternetOpen`、`InternetOpenUrl`和`InternetReadFile`这三个重要的...

    《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 网络应用实例...

    商业编程-源码-使用 CInternetSession 封装多线程 http 文件下载.zip

    在IT行业中,网络编程是至关重要的领域,尤其是在处理文件下载任务时。本示例源码主要探讨了如何在Windows平台上,利用MFC(Microsoft Foundation Classes)库中的CInternetSession类来封装多线程HTTP文件下载的过程...

    Wininet实现网络检测

    Wininet是Windows操作系统内置的一个网络编程接口,主要用于HTTP、FTP和Gopher协议的网络访问。在VC6.0这样的Visual C++开发环境中,利用Wininet库可以方便地创建应用程序进行网络连接和数据传输。本教程将详细介绍...

    MFC-WinInet.rar_MFC FTP_ftp上传下载 mfc

    这个压缩包中的“网络编程实用教程_相关章节实例源程序清单.doc”文件可能是关于如何实现上述功能的详细步骤或代码示例,供学习者参考。通过阅读和理解这些代码,开发者能够更好地掌握如何在MFC中利用WinInet实现FTP...

    简单WinInet封装示例程序

    WinInet是Windows操作系统内置的一个网络编程接口,主要用于实现HTTP、HTTPS和FTP协议的基本操作。在本示例程序"简单WinInet封装示例程序"中,开发者将WinInet的功能进行了简化,提供了对HTTP GET和POST方法的支持,...

Global site tag (gtag.js) - Google Analytics