网络编程技术(西电课件)第6章.ppt

上传人:sccc 文档编号:5388687 上传时间:2023-07-02 格式:PPT 页数:65 大小:1.13MB
返回 下载 相关 举报
网络编程技术(西电课件)第6章.ppt_第1页
第1页 / 共65页
网络编程技术(西电课件)第6章.ppt_第2页
第2页 / 共65页
网络编程技术(西电课件)第6章.ppt_第3页
第3页 / 共65页
网络编程技术(西电课件)第6章.ppt_第4页
第4页 / 共65页
网络编程技术(西电课件)第6章.ppt_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《网络编程技术(西电课件)第6章.ppt》由会员分享,可在线阅读,更多相关《网络编程技术(西电课件)第6章.ppt(65页珍藏版)》请在三一办公上搜索。

1、1,第6章 开发Internet应用程序,Internet应用程序的开发通常包括Internet服务端和客户端的应用程序,Microsoft提供了大量的API函数来支持这两种程序,客户端应用程序主要通过Internet协议(如Gopher,FTP,HTTP等)来从网络服务器上获取数据,提供访问Internet的功能,服务器端应用程序则用来支持HTTP、FTP或Gopher等类型的服务,你了解FTP协议吗?,2,你了解FTP协议吗?,3,FTP客户端=TCP客户端+固定文字响应规范,FTP协议,4,这是第五章利用CAsyncSocket类实现的TCP客户端,按照FTP协议要求,给FTP服务器发送

2、用户名,10,6.1 Internet应用程序开发的几种类型,使用WinInet类开发Internet应用程序:WinInet类支持HTTP、FTP和Gopher等标准的协议,使用Windows Socket开发Internet应用程序:Winsock标准定义了一个DLL接口来连接Internet,MFC使用CAsyncSocket和CSocket类对接口进行了封装。,使用消息收发API(MAPI:Message API)开发Internet应用程序:使用MAPI可以很方便的向其他应用程序发送电子邮件、语音邮件或传真等功能,11,6.2 WinInet开发简介,用WinInet开发程序的优点,

3、隐藏协议细节,简化编程:可不必深入了解协议,而使用WinSocket编程,需理解网络通信及协议基本原理,熟悉的编程接口:WinInet API函数和很多WinAPI函数很相似,这对有编程经验的程序员来说是很方便的。,稳定性好,不要求程序与底层直接联系:WinInet隐藏了协议的具体细节,使得程序不必直接使用各种协议,支持数据缓存:WinInet函数为所有的协议提供缓存能力,程序员只需关心数据而不用去管理数据缓存,支持多线程:由于WinInet函数在内部处理多线程的并发问题,因此WinInet函数支持多线程,在多线程中可以调用各种WinInet函数而不用担心发生问题或死锁,12,6.3 WinI

4、net类介绍,WinInet类是一个总称,目前的版本中分为四组CInternetSession类CInternetConnection(连接类)CFileFind类(Internet文件查找类)CInternetFile类和CGopherLocator类,13,6.3.1 CInternetSession类,CInternetSession类直接继承自CObject类,该类用来建立与某个Internet服务器的会话。还可以向代理服务器描述连接,如果应用程序所使用的Internet连接必须保持一段时间,则可以在CWinApp类中创建相应的CInternetSession成员,14,QueryOp

5、tion提供一个可能的错误检测判断SetOption设置Internet会话的选项OpenURL设置URL,并对其进行分析GetFtpConnection打开一个FTP会话并进行连接GetHttpConnection打开HTTP服务器并进行连接GetGopherConnection打开Gopher服务器并进行连接EnableStatusCallback建立异步操作的状态回调ServiceTypeFromHandle通过Internet句柄返回服务器类型GetContext获取Internet和应用程序会话句柄Close关闭Internet连接,CInternetSession类成员函数,15,

6、6.3.2 CInternetConnection类,包括CInternetConnection类及其派生类CHttpConnection、CFtpConnection和CGopherConnection类,这些类帮助用户管理与Internet服务器的连接,同时还提供一些函数完成和响应服务器的通信,16,CInternetConnection:用于管理与Internet服务器的连接CFtpConnection:用于管理与FTP服务器的连接,可以对服务器上的文件和目录进行直接操作CGopherConnection:管理与Gopher服务器的连接CHttpConnection:管理与HTTP服务器

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

8、TTP服务器上的文件进行操作的支持CFindFile:文文件检索提供支持CFtpFileFind:为在FTP服务器上进行的文件检索操作提供支持CGopherFileFind:为在Gopher服务器上进行的文件检索操作提供支持,文件类说明,19,6.3.4 CGopherLocator类,在从Gopher服务器中获取信息之前,必须先获得该服务器的定位器,而CGopherLocator类的主要功能就是从Gopher服务器中得到定位并确定定位器的类型。,20,6.4 用WinInet类开发应用程序,编写支持Internet的应用程序一般步骤:(1)创建一个CInternetSession对象:由于I

9、nternet会话是通过CInternetConection类的对象实现的,因此首先要创建一个CInternetSession对象,建立一个Internet会话。(2)查询或设置Internet选项:在连接时,有时还要查询或设置Internet 选项,这个工作可以通过QueryOption或SetOption函数来完成。这个步骤是可选的。,21,(3)建立与服务器的连接:客户应用程序要与服务器协同工作,在创建了CInternetSession对象后,就需要建立到服务器的连接。根据不同的协议,可选用GetFtpConnect、GetHttpConnect和GetGopherConnect三种方法

10、中的一种。(4)向用户反馈当前数据处理的进程信息:有时客户的应用程序在进行某些操作时,要耗费较长的时间,因此需要向用户反馈当前的状态,这个工作由EnableStatusCallback函数来完成,此时还要重载OnStatusCallBack函数以实现回调函数的功能。,22,(5)创建文件检索类对象,对服务器进行检索:例如对于FTP协议可以调用CFTPFileFind类来对FTP服务器上的文件进行查询,然后全部列出来(6)创建CInternetFile实例:调用CInternetSession类的成员函数OpenURL建立与服务器的连接,函数返回一个CInternetFile指针。(7)文件读写

11、操作:调用CInternetFile:Read或CInternetFile:Write函数对所得到得服务器文件进行读写操作。,23,(8)异常处理:为提高应用程序的可靠性和容错性,必须对可能出现的问题进行处理,这种处理通常是通过调用CInternetException类的对象对目前可知的异常进行处理。(9)结束:调用CInternetSession:Close结束会话并销毁CInternetSession对象。,创建CInternetSession类对象创建CInternetSession类对象,将创建并初始化Internet会话。像其它类一样,创建CInternetSession类对象需要执

12、行该类的构造函数,它的原型是:CInternetSession(LPCTSTR pstrAgent=NULL,/标识所有者 DWORD dwContext=1,/允许消息回调函数 DWORD dwAccessType=PRE_CONFIG_INTERNET_ACCESS,/注册表默认 LPCTSTR pstrProxyName=NULL,/采用哪个代理 LPCTSTR pstrProxyBypass=NULL,/跳过某些 DWORD dwFlags=0);,CInternetSession示例,25,CInternetSession*pSession;/定义会话对象指针变量pSession=n

13、ew CInternetSession(/创建Internet会话类对象AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);,查询或设置Internet请求选项创建CInternetSession类对象后,可以调用它的QueryOption成员函数查询Internet请求选项,调用它的SetOption成员函数来设置这些选项。,创建连接类对象通过调用CInternetSession对象的GetFtpConnection、GetHttpConnection、GetGopherConnection成员函数,可以分别建立CInternetSession对象与网

14、络上FTP、HTTP、和GOPHER服务器的连接。并分别创建CFtpConnection、CHttpConnection、CGopherConnection类的对象,来代表这三种连接。,28,CFtpConnection*pConnection;/定义连接对象指针变量/pSession是已建立的CInternetSession类实例/m_strFtp存放了FTP服务器域名/m_strName 存放了用户名/m_strPwd存放了密码pConnection=pSession-GetFtpConnection(m_strFtp,m_strName,m_strPwd);,创建连接类的示例,使用文件检

15、索类CFtpFileFind类和CGopherFileFind类分别封装了对于FTP和Gopher服务器的文件检索操作。它们的基类是CFileFind类。创建了连接对象后,可以进一步创建文件检索类对象,并使用该对象的方法实现对服务器的文件检索。,创建文件检索类的对象实例一般直接调用CFtpFileFind类的构造函数创建该类的对象实例。应当将前面所创建的FTP连接对象指针作为参数。构造函数的原型是:CFtpFileFind(CFtpConnection*pConnection,/连接对象指针DWORD dwContext=1);/表示此操作的环境值例如:CFtpFileFind*pFileFi

16、nd;/pConnection 是已经建立的CInternetSessionpFileFind=new CFtpFileFind(pConnection);,检索第一个符合条件的对象使用CFtpFileFind类的FindFile成员函数可以在FTP服务器上或本地缓冲区中找到第一个符合条件的对象。virtual BOOL FindFile(LPCTSTR pstrName=NULL,/指定要查找/的文件路径,可以使用通配符。例如“*.*”DWORD dwFlags=INTERNET_FLAG_RELOAD);/从哪里检索/默认从网上获取,即使本地缓冲区中有信息,查询符合条件的实例,32,BOO

17、L bContinue;/存放返回值/pFileFind 存放了CFtpFileFind对象实例bContinue=pFileFind-FindFile(*.txt);/查找服务器上当前目录的txt文件,继续查找其它的符合条件的对象在上一步的基础上,反复地调用FindNextFile成员函数,可以找到所有符合条件的对象。直到函数返回FALSE为止。FindNextFile 用于继续进行FindFile调用的文件检索操作。virtual BOOL FindNextFile();每查到一个对象,随即调用GetFileURL成员函数,可以获得已检索到的对象的URL。CString GetFileUR

18、L()const;,其它可用的成员函数CFtpFileFind类本身定义的成员函数只有上面几个。但是由于它是从CFileFind类派生的,它继承基类CFileFind的许多成员函数,例如GetCreationTime GetFileName GetFilePath GetFileTitle GetLastAccessTime GetLastWriteTime GetLength 等等,可以进行各种文件检索相关的操作。,6.5 一个文件查找的例子,35,输入FTP服务器域名 输入用户名、密码 可以查询到FTP服务器中的目录和文件列表 可以上传、下载文件,36,37,38,39,编辑框1IDC_E

19、DIT_SERVERNAME编辑框2IDC_EDIT_NAME编辑框3IDC_EDIT_PASSWORD下压式按钮IDC_BUTTON_CHECK下压式按钮IDC_ BUTTON _UPLOAD下压式按钮IDC_ BUTTON _DOWNLOAD下压式按钮IDC_BUTTON_QUIT列表框IDC_LIST_FILE,40,41,在对话框添加声明CInternetSession变量,42,43,44,关键1步:创建CInternetSession对象,45,46,47,void CFtpDlg:OnButtonCheck()/TODO:Add your control notification

20、 handler code hereUpdateData(TRUE);if(!m_ServerName.IsEmpty()/如果用户有输入才登陆FTP服务器查找 CFtpConnection*FtpConn=m_Session-GetFtpConnection(m_ServerName,m_Name,m_Password);/从CInternetSession中建立FTP 连接 CFtpFileFind*pFtpFind=new CFtpFileFind(FtpConn);/从FTP 连接中建立FTP文件查找类实例 BOOL bContinue=pFtpFind-FindFile(*.*);i

21、f(!bContinue)/如果一个文件都找不到,结束查找pFtpFind-Close();pFtpFind=NULL;,/创建FTP连接类对象,48,pFtpFind-FindNextFile();/MSDN上讲述,在GetFileName()之前/必须调用一次FindNextFile(),故原书上的例子有错 CString strFileName;while(bContinue)/找到了第一个文件,继续找其它的文件 strFileName=pFtpFind-GetFileName();/获得找到的文件的文件名/如果找到的是否目录,将目录名放在括弧中 if(pFtpFind-IsDirect

22、ory()strFileName=+strFileName+;/将找到的文件或目录名显示在列表框中。m_ListFile.AddString(strFileName);bContinue=pFtpFind-FindNextFile();/查找下一个文件/其他处理,比如用完之后的连接关闭等等,49,FTP工具,50,3COM 3CDaemonServ-UFTP Server建议大家回去试试,小结,51,TCP协议客户端能完成FTP协议客户端的功能,但是必须先了解FTP协议 同理,TCP协议服务器能完成FTP协议服务器的功能 利用Socket开发FTP这样的常见协议软件有点复杂,直接利用FTP相关

23、类更方便些,52,6.6 WinInet类编程实例,这一次我们要利用WinInet类编写Internet应用程序,完成3种协议。在URL编辑框中写入地址,单击“Http”、“Ftp”或“Gopher”等按钮可在编辑框中显示查询到的相应服务器的信息,编辑框1IDC_EDIT_URL编辑框2IDC_EDIT_RESULT下压式按钮IDC_BUTTON_HTTP下压式按钮IDC_ BUTTON _FTP下压式按钮IDC_ BUTTON _GOPHER下压式按钮IDC_BUTTON_QUIT静态文本IDC_STATIC组框IDC_STATIC,53,给界面对象连接接变量,54,(a)给应用程序增加一个

24、自定义的类,单击InsertNew Class菜单,添加新类类名为CMyWinInetClass,系统会自动在项目中增加MyWinInetClass.cpp和MyWinInetClass.h两个文件,55,(b)在新加入的类中增加如下三个public的成员函数,在头文件MyWinInetClass.h中可看到这些函数。CString ConnectFtp(const CString sUrl);/完成连接Ftp功能的函数CString ConnectHttp(const CString sUrl);/完成连接Http功能的函数CString ConnectGopher(const CStrin

25、g sUrl);/完成连接Gopher功能的函数,56,为了建立Internet的会话,新增加的CmyWinInetClass类中加入一个private型成员变量m_session:CInternetSession m_session;/建立Internet会话由于在上面定义了一个CWinInet类的对象,所以还需要在MyWinInetClass.h头文件中加入如下代码:#include afxinet.h#include wininet.h,57,为CMyWinInetClass类添加三个用于连接的成员函数,它们分别是ConnectFtp、ConnectHttp和ConnectGopher。

26、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服务器的连接,58,if(Ftpconnection)sResult=sResult+Connection established.rn;

27、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;,59,CString CMyWinInetClass:ConnectHttp(const CString sUrl)CString

28、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;while(hHttpFile-ReadString(sLine)/读取Http服务器上的内容sResult=sResult+sLine+rn;hH

29、ttpFile-Close();/关闭连接else sResult=sResult+There are some errors in finding this Http sites;return sResult;,60,CString CMyWinInetClass:ConnectGopher(const CString sUrl)CString sResult;CInternetFile*hGopherFile=NULL;sResult=;sResult=sResult+Trying to connect Gopher sites+sUrl+rn;hGopherFile=(CInternet

30、File*)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;,61,在C

31、MyInternetDlg类中增加一个public成员变量CMyWinInetClass m_WinInetClass;变量m_WinInetClass是CMyWinInetClass类的一个对象,所以还要在WinInetDlg.h头文件加入自定义类的头文件:#include MyWinInetClass.h,62,三个消息处理函数增加代码如下:void CWinInetDlg:OnButtonFtp()UpdateData(TRUE);/从对话框读入地址信息m_Url m_EditResult=;/调用自定义类的成员函数,连接Ftp服务器,m_Url为地址 m_EditResult=m_Ed

32、itResult+m_WinInetClass.ConnectFtp(m_Url);UpdateData(FALSE);void CWinInetDlg:OnButtonHttp()UpdateData(TRUE);/从对话框读入地址信息m_Url m_EditResult=;/调用自定义类的成员函数,连接Http服务器,m_Url为地址 m_EditResult=m_EditResult+m_WinInetClass.ConnectHttp(m_Url);UpdateData(FALSE);,63,void CWinInetDlg:OnButtonGopher()UpdateData(TRUE);/从对话框读入地址信息m_Url m_EditResult=;/调用自定义类的成员函数,连接Gopher服务器,m_Url为地址 m_EditResult=m_EditResult+m_WinInetClass.ConnectGopher(m_Url);UpdateData(FALSE);,64,65,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号