当前位置:首页 > 商业/管理/HR > 资本运营 > 14_iinternet
1第14章开发Internet应用程序Internet应用程序的开发通常包括Internet服务端和客户端的应用程序,Microsoft提供了大量的API函数来支持这两种程序,客户端应用程序主要通过Internet协议(如Gopher,FTP,HTTP等)来从网络服务器上获取数据,提供访问Internet的功能,服务器端应用程序则用来支持HTTP、FTP或Gopher等类型的服务214.1Internet应用程序开发的几种类型使用WinInet类开发Internet应用程序:WinInet类支持HTTP、FTP和Gopher等标准的协议使用WindowsSocket开发Internet应用程序:Winsock标准定义了一个DLL接口来连接Internet,MFC使用CAsyncSocket和CSocket类对接口进行了封装。使用消息收发API(MAPI:MessageAPI)开发Internet应用程序:使用MAPI可以很方便的向其他应用程序发送电子邮件、语音邮件或传真等功能314.2WinInet开发简介用WinInet开发程序的优点隐藏协议细节,简化编程:可不必深入了解协议,而使用WinSocket编程,需理解网络通信及协议基本原理熟悉的编程接口:WinInetAPI函数和很多WinAPI函数很相似,这对有编程经验的程序员来说是很方便的。稳定性好,不要求程序与底层直接联系:WinInet隐藏了协议的具体细节,使得程序不必直接使用各种协议支持数据缓存:WinInet函数为所有的协议提供缓存能力,程序员只需关心数据而不用去管理数据缓存支持多线程:由于WinInet函数在内部处理多线程的并发问题,因此WinInet函数支持多线程,在多线程中可以调用各种WinInet函数而不用担心发生问题或死锁414.3WinInet类介绍WinInet类是一个总称,目前的版本中分为四组•CInternetSession类•CInternetConnection(连接类)•CFileFind类(Internet文件查找类)•CInternetFile类和CGopherLocator类514.3.1CInternetSession类CInternetSession类直接继承自CObject类,该类用来建立与某个Internet服务器的会话。还可以向代理服务器描述连接,如果应用程序所使用的Internet连接必须保持一段时间,则可以在CWinApp类中创建相应的CInternetSession成员6QueryOption提供一个可能的错误检测判断SetOption设置Internet会话的选项OpenURL设置URL,并对其进行分析GetFtpConnection打开一个FTP会话并进行连接GetHttpConnection打开HTTP服务器并进行连接GetGopherConnection打开Gopher服务器并进行连接EnableStatusCallback建立异步操作的状态回调ServiceTypeFromHandle通过Internet句柄返回服务器类型GetContext获取Internet和应用程序会话句柄Close关闭Internet连接CInternetSession类成员函数714.3.2CInternetConnection类包括CInternetConnection类及其派生类CHttpConnection、CFtpConnection和CGopherConnection类,这些类帮助用户管理与Internet服务器的连接,同时还提供一些函数完成和响应服务器的通信8CInternetConnection:用于管理与Internet服务器的连接CFtpConnection:用于管理与FTP服务器的连接,可以对服务器上的文件和目录进行直接操作CGopherConnection:管理与Gopher服务器的连接CHttpConnection:管理与HTTP服务器的连接连接类及其派生类914.3.3CInternetFile类包括CInternetFile类及其派生类CHttpFile、CGopherFile。这些类实现对远程系统上的文件的存取工作。文件类还包含CFileFind类及其派生类CFtpFileFind、CGopherFileFind类。CFileFind类直接继承于CObject类,这些类实现对本地和远程系统上的文件的搜索和定位工作。10CInternetFile:允许对使用Internet协议的远程系统中的文件进行操作CGopherFile:为在Gopher服务器上进行文件检索和读取操作提供支持CHttpFile:提供对HTTP服务器上的文件进行操作的支持CFindFile:文文件检索提供支持CFtpFileFind:为在FTP服务器上进行的文件检索操作提供支持CGopherFileFind:为在Gopher服务器上进行的文件检索操作提供支持文件类说明1114.3.4CGopherLocator类在从Gopher服务器中获取信息之前,必须先获得该服务器的定位器,而CGopherLocator类的主要功能就是从Gopher服务器中得到定位并确定定位器的类型。1214.4用WinInet类开发应用程序编写支持Internet的应用程序一般步骤:(1)创建一个CInternetSession对象:由于Internet会话是通过CInternetConection类的对象实现的,因此首先要创建一个CInternetSession对象,建立一个Internet会话。(2)建立与服务器的连接:客户应用程序要与服务器协同工作,在创建了CInternetSession对象后,就需要建立到服务器的连接。根据不同的协议,可选用GetFtpConnect、GetHttpConnect和GetGopherConnect三种方法中的一种。13(3)查询或设置Internet选项:在连接时,有时还要查询或设置Internet选项,这个工作可以通过QueryOption或SetOption函数来完成。(4)向用户反馈当前数据处理的进程信息:有时客户的应用程序在进行某些操作时,要耗费较长的时间,因此需要向用户反馈当前的状态,这个工作由EnableStatusCallback函数来完成,此时还要重载OnStatusCallBack函数以实现回调函数的功能。14(5)创建CInternetFile实例:调用CInternetSession类的成员函数OpenURL建立与服务器的连接,函数返回一个CInternetFile指针。(6)文件读写操作:调用CInternetFile::Read或CInternetFile::Write函数对所得到得服务器文件进行读写操作。(7)异常处理:为提高应用程序的可靠性和容错性,必须对可能出现的问题进行处理,这种处理通常是通过调用CInternetException类的对象对目前可知的异常进行处理。(8)结束:调用CInternetSession::Close结束会话并销毁CInternetSession对象。1514.5WinInet类编程实例【例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_STATIC16给界面对象连接接变量17(a)给应用程序增加一个自定义的类,单击InsertNewClass菜单,添加新类类名为CMyWinInetClass,系统会自动在项目中增加MyWinInetClass.cpp和MyWinInetClass.h两个文件18(b)在新加入的类中增加如下三个public的成员函数,在头文件MyWinInetClass.h中可看到这些函数。CStringConnectFtp(constCStringsUrl);//完成连接Ftp功能的函数CStringConnectHttp(constCStringsUrl);//完成连接Http功能的函数CStringConnectGopher(constCStringsUrl);//完成连接Gopher功能的函数19为了建立Internet的会话,新增加的CmyWinInetClass类中加入一个private型成员变量m_session:CInternetSessionm_session;//建立Internet会话由于在上面定义了一个CWinInet类的对象,所以还需要在MyWinInetClass.h头文件中加入如下代码:#includeafxinet.h#includewininet.h20为CMyWinInetClass类添加三个用于连接的成员函数,它们分别是ConnectFtp、ConnectHttp和ConnectGopher。CStringCMyWinInetClass::ConnectFtp(constCStringsUrl){CStringsResult;//存储连接信息的字符串CFtpConnection*Ftpconnection=NULL;sResult=;sResult=sResult+TryingtoconnectFtpsites+sUrl+\r\n;Ftpconnection=m_session.GetFtpConnection(sUrl);//建立到Ftp服务器的连接21if(Ftpconnection){sResult=sResult+Connectionestablished.\r\n;CStringsCurDir;Ftpconnection-GetCurrentDirectory(sCurDir);//得到Ftp服务器的当前目录sResult=sResult+currentdirectoryis+sCurDir+\r\n;Ftpconnection-Close();//关闭连接}else{sResult=sResult+TherearesomeerrorsinfindingthisFtpsites;}returnsResult;}22CStringCMyWinInetClass::ConnectHttp(constCStringsUrl){CStringsResult;CInternetFile*hHttpFile=NULL;sResult=;sResult=sResult+TryingtoconnectHttpsites+sUrl+\r\n;hHttpFile=(CInternetFile*)m_session.OpenURL(sUrl);//得到文件指针if(hHttpFile){sResult=sResult+Connectionestablished.\r\n;CStringsLine;while(hHttpFile-ReadString(sLine))//读取Http服务器上的内容sResult=sResult+sLine+\r\n;hHttpFile-Close();//关闭连接}elsesResult=sResult+TherearesomeerrorsinfindingthisHttpsites;returnsResult;}23CStringCMyWinInetClass::ConnectGopher(constCStringsUrl){CStringsResult;CInternetFile*hGopherFile=NULL;sResult=;sResult=sResult+TryingtoconnectGophersites+sUrl+\r\n;hGopherFile=(CInternetFi
本文标题:14_iinternet
链接地址:https://www.777doc.com/doc-3061027 .html