第14章_开发Internet应用程序.ppt_第1页
第14章_开发Internet应用程序.ppt_第2页
第14章_开发Internet应用程序.ppt_第3页
第14章_开发Internet应用程序.ppt_第4页
第14章_开发Internet应用程序.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,第14章 开发Internet应用程序,Internet应用程序的开发通常包括Internet服务端和客户端的应用程序, Microsoft提供了大量的API函数来支持这两种程序,客户端应用程序主要通过Internet协议(如Gopher,FTP,HTTP等)来从网络服务器上获取数据,提供访问Internet的功能,服务器端应用程序则用来支持HTTP、FTP或Gopher等类型的服务,2,14.1 Internet应用程序开发的几种类型,使用WinInet类开发Internet应用程序:WinInet类支持HTTP、FTP和Gopher等标准的协议,使用Windows Socket开发In

2、ternet应用程序:Winsock标准定义了一个DLL接口来连接Internet,MFC使用CAsyncSocket和CSocket类对接口进行了封装。,使用消息收发API(MAPI:Message API) 开发Internet应用程序:使用MAPI可以很方便的向其他应用程序发送电子邮件、语音邮件或传真等功能,3,14.2 WinInet开发简介,用WinInet开发程序的优点,隐藏协议细节,简化编程:可不必深入了解协议,而使用WinSocket编程,需理解网络通信及协议基本原理,熟悉的编程接口:WinInet API函数和很多WinAPI函数很相似,这对有编程经验的程序员来说是很方便的。

3、,稳定性好,不要求程序与底层直接联系:WinInet隐藏了协议的具体细节,使得程序不必直接使用各种协议,支持数据缓存:WinInet函数为所有的协议提供缓存能力,程序员只需关心数据而不用去管理数据缓存,支持多线程:由于WinInet函数在内部处理多线程的并发问题,因此WinInet函数支持多线程,在多线程中可以调用各种WinInet函数而不用担心发生问题或死锁,4,14.3 WinInet类介绍,WinInet类是一个总称,目前的版本中分为四组 CInternetSession类 CInternetConnection (连接类) CFileFind类(Internet文件查找类) CInte

4、rnetFile类和CGopherLocator类,5,14.3.1 CInternetSession类,CInternetSession类直接继承自CObject类,该类用来建立与某个Internet服务器的会话。还可以向代理服务器描述连接,如果应用程序所使用的Internet连接必须保持一段时间,则可以在CWinApp类中创建相应的CInternetSession成员,6,QueryOption提供一个可能的错误检测判断 SetOption设置Internet会话的选项 OpenURL设置URL,并对其进行分析 GetFtpConnection打开一个FTP会话并进行连接 GetHttpC

5、onnection打开HTTP服务器并进行连接 GetGopherConnection打开Gopher服务器并进行连接 EnableStatusCallback建立异步操作的状态回调 ServiceTypeFromHandle通过Internet句柄返回服务器类型 GetContext获取Internet和应用程序会话句柄 Close关闭Internet连接,CInternetSession类成员函数,7,14.3.2 CInternetConnection类,包括CInternetConnection类及其派生类CHttpConnection、CFtpConnection和CGopherCo

6、nnection类, 这些类帮助用户管理与Internet服务器的连接,同时还提供一些函数完成和响应服务器的通信,8,CInternetConnection:用于管理与Internet服务器的连接 CFtpConnection:用于管理与FTP服务器的连接,可以对服务器上的文件和目录进行直接操作 CGopherConnection:管理与Gopher服务器的连接 CHttpConnection:管理与HTTP服务器的连接,连接类及其派生类,9,14.3.3 CInternetFile类,包括CInternetFile类及其派生类CHttpFile、CGopherFile。这些类实现对远程系统上

7、的文件的存取工作。 文件类还包含CFileFind类及其派生类CFtpFileFind、CGopherFileFind类。CFileFind类直接继承于CObject类,这些类实现对本地和远程系统上的文件的搜索和定位工作。,10,CInternetFile:允许对使用Internet协议的远程系统中的文件进行操作 CGopherFile:为在Gopher服务器上进行文件检索和读取操作提供支持 CHttpFile:提供对HTTP服务器上的文件进行操作的支持 CFindFile:文文件检索提供支持 CFtpFileFind:为在FTP服务器上进行的文件检索操作提供支持 CGopherFileFin

8、d:为在Gopher服务器上进行的文件检索操作提供支持,文件类说明,11,14.3.4 CGopherLocator类,在从Gopher服务器中获取信息之前,必须先获得该服务器的定位器,而CGopherLocator类的主要功能就是从Gopher服务器中得到定位并确定定位器的类型。,12,14.4 用WinInet类开发应用程序,编写支持Internet的应用程序一般步骤: (1)创建一个CInternetSession对象:由于Internet会话是通过CInternetConection类的对象实现的,因此首先要创建一个CInternetSession对象,建立一个Internet会话。

9、(2)建立与服务器的连接:客户应用程序要与服务器协同工作,在创建了CInternetSession对象后,就需要建立到服务器的连接。根据不同的协议,可选用GetFtpConnect、GetHttpConnect和GetGopherConnect三种方法中的一种。,13,(3)查询或设置Internet选项:在连接时,有时还要查询或设置Internet 选项,这个工作可以通过QueryOption或SetOption函数来完成。 (4)向用户反馈当前数据处理的进程信息:有时客户的应用程序在进行某些操作时,要耗费较长的时间,因此需要向用户反馈当前的状态,这个工作由EnableStatusCallb

10、ack函数来完成,此时还要重载OnStatusCallBack函数以实现回调函数的功能。,14,(5)创建CInternetFile实例:调用CInternetSession类的成员函数OpenURL建立与服务器的连接,函数返回一个CInternetFile指针。 (6)文件读写操作:调用CInternetFile:Read或CInternetFile:Write函数对所得到得服务器文件进行读写操作。 (7)异常处理:为提高应用程序的可靠性和容错性,必须对可能出现的问题进行处理,这种处理通常是通过调用CInternetException类的对象对目前可知的异常进行处理。 (8) 结束:调用CI

11、nternetSession:Close结束会话并销毁CInternetSession对象。,15,14.5 WinInet类编程实例,【例14-1】利用WinInet类编写Internet应用程序。在URL编辑框中写入地址,单击“Http”、“Ftp”或“Gopher”等按钮可在编辑框中显示查询到的相应服务器的信息,编辑框1IDC_EDIT_URL 编辑框2IDC_EDIT_RESULT 下压式按钮IDC_BUTTON_HTTP 下压式按钮IDC_ BUTTON _FTP 下压式按钮IDC_ BUTTON _GOPHER 下压式按钮IDCANCEL 静态文本IDC_STATIC 组框IDC_

12、STATIC,16,给界面对象连接接变量,17,(a) 给应用程序增加一个自定义的类,单击InsertNew Class菜单,添加新类类名为CMyWinInetClass,系统会自动在项目中增加MyWinInetClass.cpp和MyWinInetClass.h两个文件,18,(b)在新加入的类中增加如下三个public的成员函数,在头文件MyWinInetClass.h中可看到这些函数。 CString ConnectFtp(const CString sUrl); /完成连接Ftp功能的函数 CString ConnectHttp(const CString sUrl); /完成连接Ht

13、tp功能的函数 CString ConnectGopher(const CString sUrl); /完成连接Gopher功能的函数,19,为了建立Internet的会话,新增加的CmyWinInetClass类中加入一个private型成员变量m_session: CInternetSession m_session; /建立Internet会话 由于在上面定义了一个CWinInet类的对象,所以还需要在MyWinInetClass.h头文件中加入如下代码: #include afxinet.h #include wininet.h,20,为CMyWinInetClass类添加三个用于连接

14、的成员函数,它们分别是ConnectFtp、ConnectHttp和ConnectGopher。 CString CMyWinInetClass:ConnectFtp(const CString sUrl) CString sResult;/存储连接信息的字符串 CFtpConnection *Ftpconnection=NULL; sResult=; sResult=sResult+Trying to connect Ftp sites+sUrl+rn; Ftpconnection=m_session.GetFtpConnection(sUrl); /建立到Ftp服务器的连接,21,if(F

15、tpconnection) sResult=sResult+Connection established.rn; CString sCurDir; Ftpconnection-GetCurrentDirectory(sCurDir); /得到Ftp服务器的当前目录 sResult=sResult+current directory is+sCurDir+rn; Ftpconnection-Close();/关闭连接 else sResult=sResult+There are some errors in finding this Ftp sites; return sResult; ,22,

16、CString CMyWinInetClass:ConnectHttp(const CString sUrl) CString sResult; CInternetFile *hHttpFile=NULL; sResult=; sResult=sResult+Trying to connect Http sites+sUrl+rn; hHttpFile=(CInternetFile *)m_session.OpenURL(sUrl); /得到文件指针 if(hHttpFile) sResult=sResult+Connection established.rn; CString sLine;

17、while(hHttpFile-ReadString(sLine) /读取Http服务器上的内容sResult=sResult+sLine+rn; hHttpFile-Close();/关闭连接 else sResult=sResult+There are some errors in finding this Http sites; return sResult; ,23,CString CMyWinInetClass:ConnectGopher(const CString sUrl) CString sResult; CInternetFile *hGopherFile=NULL; sRe

18、sult=; sResult=sResult+Trying to connect Gopher sites+sUrl+rn; hGopherFile=(CInternetFile *)m_session.OpenURL(sUrl); /得到文件指针 if(hGopherFile) sResult=sResult+Connection established.rn; CString sLine; while(hGopherFile-ReadString(sLine) /读取Gopher服务器内容sResult=sResult+sLine+rn; hGopherFile-Close();/结束连接 else sResult=sResult+There are some errors in finding this Gopher sites; return sResult; ,24,在CMyInternetDlg类中增加一个public成员变量 CMyWinInetClass m_WinInetClass; 变量m_WinInetClass是CMyWinInetClass类的一个对象,所以还要在WinInetDlg.h头文件加入自定义类的头文件: #include MyWin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论