




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、概述 一个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 CHttpConnectionCInternetFile(父类 CStdioFile) CGopherFile CHttpFileCFileFind(父类 CObject) CFtpFileFind CGopherFileFindCGopherLocator(父类 CObject)CInternetException(父类 CException) 全程函数: AfxParseURLAfxGetInternetHandleTypeAfxThrowInternetException 这些类和全程函数除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客户端应用。 二、实现步骤 大家知道,每个Internet客户端程序都伴随有一定的目的行为,如读文件、写文件、删除文件等等。客户端的程序要实现这些行为的先决条件是建立Internet连接。然后再根据不同的目的进行具体的操作。为了方便起见,下面这这些张表格针对不同的应用行为列出了所需要的具体操作。其中列出了一般的Internet URL (FTP、或者 HTTP)客户端行为要实现某个目标所必须使用的方法。这张表格的内容来自MSDN。我对部分我认为重要的地方做了补充。(表一)一个典型的Internet客户端程序的处理流程 目的方法结果开始一个Internet session创建 CInternetSession 对象初始化WinInet,并连接服务器读取或设置 InternetQuery 选项 (如超时或重试次数)调用 CInternetSession:SetOption不成功返回FALSE建立回调函数监视session状态调用CInternetSession:EnableStatusCallback建立回调函数CInternetSession:OnStatusCallback,重写OnStatusCallback,创建自己的回调例程Internet服务器Intranet服务器或本地文件调用 CInternetSession:OpenURL解析并打开到指定服务器的连接,返回CStdioFile(如果你传递的OpenURL是本地文件名)或CInternetFile对象,通过存取这个对象,获得服务器或文件的数据读文件调用 CInternetFile:Read用你提供的Buffer读指定的字节数异常处理在 CInternetException 类中处理处理所有普通的 Internet 异常类型结束 Internet session 处理CInternetSession对象自动清除打开的句柄的连接(表二)典型的 FTP 客户端程序实现的一般步骤目的方法结果开始一个FTP会话,建立一个FTP连接创建一个CInternetSession对象,调用CInternetSession:GetFtpConnection初始化WinInet并联接服务器连接到一个FTP Server用CInternetSession:GetFtpConnection返回一个CFtpConnection对象CD到 FTP 服务器的一个新目录用CFtpConnection:SetCurrentDirectoryCD到FTP服务器的一个新目录Find 第一个FTP目录中的文件创建一个CFtpFileFind对象,调用CFtpFileFind:FindFile,OpenURL函数返回一个只读资源对象;调用CFtpFileFind:FindFileFind第一个文件,如果文件每找到返回FALSE枚举所有可获得的资源,Find下一个FTP目录中的文件Find下一个资源,调用CFtpFileFind:FindNextFile直到返回FALSE。Find下一个文件如果文件没找到返回FALSE打开FindFile或FindNextFile找到的文件(用于读写)调用CFtpConnection:OpenFile,参数为FindFile或FindNextFile返回的文件名 ,创建并打开一个CInternetFile对象打开FindFile或FindNextFile找到的文件(用于读写),返回一个CInternetFile对象读写文件以读方式打开FTP文件,用CInternetFile:Read使用你指定的缓冲读指定的字节数写FTP文件以写方式打开FTP文件,调用CInternetFile:Write,重写CInternetSession:OnStatusCallback使用你指定的缓冲写指定的字节数改变客户端在服务器上的目录调用CFtpConnection:SetCurrentDirectory进入新的目录获取客户端在服务器上的当前目录调用CFtpConnection:GetCurrentDirectory获取目录信息异常处理用CInternetException类处理所有普通的Internet异常类型结束FTP session处理CInternetSession对象自动清除打开的句柄的连接(表三)显示了一个典型的删除文件的FTP客户端应用要实现的一般步骤:目的方法结果开始一个FTP session创建一个CInternetSession对象初始化WinInet并联接服务器连接到一个FTP Server用CInternetSession:GetFtpConnection返回一个CFtpConnection对象检查FTP目录是否正确用CFtpConnection:GetCurrentDirectory或CFtpConnection:GetCurrentDirectoryAsURL 返回目录名字服务器目录或返回目录的URLCD(改变目录)到 FTP 服务器的一个新目录用CFtpConnection:SetCurrentDirectoryCD到FTP服务器的一个新目录Find 第一个FTP目录中的文件用CFtpFileFind:FindFileFind第一个文件,如果文件每找到返回FALSEFind 下一个FTP目录中的文件用CFtpFileFind:FindNextFileFind下一个文件如果文件没找到返回FALSE删除FindFile或FindNextFile找到的文件用CFtpConnection:Remove用FindFile或FindNextFile返回的文件名删除FindFile或FindNextFile找到的文件异常处理用CInternetException类处理所有普通的Internet异常类型结束FTP session处理CInternetSession对象自动清除打开的句柄的连接(表四)显示了实现一个典型的 HTTP 客户端应用程序的一般步骤:目的方法结果开始HTTP会话,建立HTTP连接 创建 C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乐理音程考试题库及答案
- 森林防护巡护知识培训课件
- 森林家庭防火知识培训课件
- 棋王课件中职
- 海南省养老护理员职业资格技师考试题(含答案)
- 2025年精细化工作业面试宝典涵盖各类工艺作业预测题
- 2025年裁判台球考试题及答案
- 2025年公路水运安全员(交安abc)考试考核题库答案
- 2025年项目经理从业资格认证考试模拟试题集及答题技巧
- 2025年软件工程师职称评定预测试题及答案参考
- 2025年秋季学期(统编版)二年级上册语文教学工作计划及教学进度表
- 2025年福建省厦门市【辅警协警】笔试真题(含答案)
- 2025年广西中考语文试题卷(含答案)
- 新疆维吾尔自治区、新疆生产建设兵团2020年中考语文试卷及答案
- GB/T 23986.2-2023色漆和清漆挥发性有机化合物(VOC)和/或半挥发性有机化合物(SVOC)含量的测定第2部分:气相色谱法
- JB-T 4088.1-2022 日用管状电热元件 第1部分:通用要求
- 重点单位消防八本台帐
- 售后维修服务单
- 中小学教师违反职业道德行为处理办法课件
- 《复变函数》课程说课
- 医院免疫检验报告(性激素6项)
评论
0/150
提交评论