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

上传人:max****ui 文档编号:8601985 上传时间:2020-03-30 格式:PPT 页数:65 大小:1.13MB
返回 下载 相关 举报
网络编程技术(西电课件)第6章.ppt_第1页
第1页 / 共65页
网络编程技术(西电课件)第6章.ppt_第2页
第2页 / 共65页
网络编程技术(西电课件)第6章.ppt_第3页
第3页 / 共65页
点击查看更多>>
资源描述
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服务器发送用户名 10 6 1Internet应用程序开发的几种类型 使用WinInet类开发Internet应用程序 WinInet类支持HTTP FTP和Gopher等标准的协议 使用WindowsSocket开发Internet应用程序 Winsock标准定义了一个DLL接口来连接Internet MFC使用CAsyncSocket和CSocket类对接口进行了封装 使用消息收发API MAPI MessageAPI 开发Internet应用程序 使用MAPI可以很方便的向其他应用程序发送电子邮件 语音邮件或传真等功能 11 6 2WinInet开发简介 用WinInet开发程序的优点 隐藏协议细节 简化编程 可不必深入了解协议 而使用WinSocket编程 需理解网络通信及协议基本原理 熟悉的编程接口 WinInetAPI函数和很多WinAPI函数很相似 这对有编程经验的程序员来说是很方便的 稳定性好 不要求程序与底层直接联系 WinInet隐藏了协议的具体细节 使得程序不必直接使用各种协议 支持数据缓存 WinInet函数为所有的协议提供缓存能力 程序员只需关心数据而不用去管理数据缓存 支持多线程 由于WinInet函数在内部处理多线程的并发问题 因此WinInet函数支持多线程 在多线程中可以调用各种WinInet函数而不用担心发生问题或死锁 12 6 3WinInet类介绍 WinInet类是一个总称 目前的版本中分为四组CInternetSession类CInternetConnection 连接类 CFileFind类 Internet文件查找类 CInternetFile类和CGopherLocator类 13 6 3 1CInternetSession类 CInternetSession类直接继承自CObject类 该类用来建立与某个Internet服务器的会话 还可以向代理服务器描述连接 如果应用程序所使用的Internet连接必须保持一段时间 则可以在CWinApp类中创建相应的CInternetSession成员 14 QueryOption提供一个可能的错误检测判断SetOption设置Internet会话的选项OpenURL设置URL 并对其进行分析GetFtpConnection打开一个FTP会话并进行连接GetHttpConnection打开HTTP服务器并进行连接GetGopherConnection打开Gopher服务器并进行连接EnableStatusCallback建立异步操作的状态回调ServiceTypeFromHandle通过Internet句柄返回服务器类型GetContext获取Internet和应用程序会话句柄Close关闭Internet连接 CInternetSession类成员函数 15 6 3 2CInternetConnection类 包括CInternetConnection类及其派生类CHttpConnection CFtpConnection和CGopherConnection类 这些类帮助用户管理与Internet服务器的连接 同时还提供一些函数完成和响应服务器的通信 16 CInternetConnection 用于管理与Internet服务器的连接CFtpConnection 用于管理与FTP服务器的连接 可以对服务器上的文件和目录进行直接操作CGopherConnection 管理与Gopher服务器的连接CHttpConnection 管理与HTTP服务器的连接 连接类及其派生类 17 6 3 3CInternetFile类 包括CInternetFile类及其派生类CHttpFile CGopherFile 这些类实现对远程系统上的文件的存取工作 文件类还包含CFileFind类及其派生类CFtpFileFind CGopherFileFind类 CFileFind类直接继承于CObject类 这些类实现对本地和远程系统上的文件的搜索和定位工作 18 CInternetFile 允许对使用Internet协议的远程系统中的文件进行操作CGopherFile 为在Gopher服务器上进行文件检索和读取操作提供支持CHttpFile 提供对HTTP服务器上的文件进行操作的支持CFindFile 文文件检索提供支持CFtpFileFind 为在FTP服务器上进行的文件检索操作提供支持CGopherFileFind 为在Gopher服务器上进行的文件检索操作提供支持 文件类说明 19 6 3 4CGopherLocator类 在从Gopher服务器中获取信息之前 必须先获得该服务器的定位器 而CGopherLocator类的主要功能就是从Gopher服务器中得到定位并确定定位器的类型 20 6 4用WinInet类开发应用程序 编写支持Internet的应用程序一般步骤 1 创建一个CInternetSession对象 由于Internet会话是通过CInternetConection类的对象实现的 因此首先要创建一个CInternetSession对象 建立一个Internet会话 2 查询或设置Internet选项 在连接时 有时还要查询或设置Internet选项 这个工作可以通过QueryOption或SetOption函数来完成 这个步骤是可选的 21 3 建立与服务器的连接 客户应用程序要与服务器协同工作 在创建了CInternetSession对象后 就需要建立到服务器的连接 根据不同的协议 可选用GetFtpConnect GetHttpConnect和GetGopherConnect三种方法中的一种 4 向用户反馈当前数据处理的进程信息 有时客户的应用程序在进行某些操作时 要耗费较长的时间 因此需要向用户反馈当前的状态 这个工作由EnableStatusCallback函数来完成 此时还要重载OnStatusCallBack函数以实现回调函数的功能 22 5 创建文件检索类对象 对服务器进行检索 例如对于FTP协议可以调用CFTPFileFind类来对FTP服务器上的文件进行查询 然后全部列出来 6 创建CInternetFile实例 调用CInternetSession类的成员函数OpenURL建立与服务器的连接 函数返回一个CInternetFile指针 7 文件读写操作 调用CInternetFile Read或CInternetFile Write函数对所得到得服务器文件进行读写操作 23 8 异常处理 为提高应用程序的可靠性和容错性 必须对可能出现的问题进行处理 这种处理通常是通过调用CInternetException类的对象对目前可知的异常进行处理 9 结束 调用CInternetSession Close结束会话并销毁CInternetSession对象 创建CInternetSession类对象创建CInternetSession类对象 将创建并初始化Internet会话 像其它类一样 创建CInternetSession类对象需要执行该类的构造函数 它的原型是 CInternetSession LPCTSTRpstrAgent NULL 标识所有者DWORDdwContext 1 允许消息回调函数DWORDdwAccessType PRE CONFIG INTERNET ACCESS 注册表默认LPCTSTRpstrProxyName NULL 采用哪个代理LPCTSTRpstrProxyBypass NULL 跳过某些DWORDdwFlags 0 CInternetSession示例 25 CInternetSession pSession 定义会话对象指针变量pSession newCInternetSession 创建Internet会话类对象AfxGetAppName 1 PRE CONFIG INTERNET ACCESS 查询或设置Internet请求选项创建CInternetSession类对象后 可以调用它的QueryOption成员函数查询Internet请求选项 调用它的SetOption成员函数来设置这些选项 创建连接类对象通过调用CInternetSession对象的GetFtpConnection GetHttpConnection GetGopherConnection成员函数 可以分别建立CInternetSession对象与网络上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 创建连接类的示例 使用文件检索类CFtpFileFind类和CGopherFileFind类分别封装了对于FTP和Gopher服务器的文件检索操作 它们的基类是CFileFind类 创建了连接对象后 可以进一步创建文件检索类对象 并使用该对象的方法实现对服务器的文件检索 创建文件检索类的对象实例一般直接调用CFtpFileFind类的构造函数创建该类的对象实例 应当将前面所创建的FTP连接对象指针作为参数 构造函数的原型是 CFtpFileFind CFtpConnection pConnection 连接对象指针DWORDdwContext 1 表示此操作的环境值例如 CFtpFileFind pFileFind pConnection是已经建立的CInternetSessionpFileFind newCFtpFileFind pConnection 检索第一个符合条件的对象使用CFtpFileFind类的FindFile成员函数可以在FTP服务器上或本地缓冲区中找到第一个符合条件的对象 virtualBOOLFindFile LPCTSTRpstrName NULL 指定要查找 的文件路径 可以使用通配符 例如 DWORDdwFlags INTERNET FLAG RELOAD 从哪里检索 默认从网上获取 即使本地缓冲区中有信息 查询符合条件的实例 32 BOOLbContinue 存放返回值 pFileFind存放了CFtpFileFind对象实例bContinue pFileFind FindFile txt 查找服务器上当前目录的txt文件 继续查找其它的符合条件的对象在上一步的基础上 反复地调用FindNextFile成员函数 可以找到所有符合条件的对象 直到函数返回FALSE为止 FindNextFile用于继续进行FindFile调用的文件检索操作 virtualBOOLFindNextFile 每查到一个对象 随即调用GetFileURL成员函数 可以获得已检索到的对象的URL CStringGetFileURL const 其它可用的成员函数CFtpFileFind类本身定义的成员函数只有上面几个 但是由于它是从CFileFind类派生的 它继承基类CFileFind的许多成员函数 例如GetCreationTimeGetFileNameGetFilePathGetFileTitleGetLastAccessTimeGetLastWriteTimeGetLength等等 可以进行各种文件检索相关的操作 6 5一个文件查找的例子 35 输入FTP服务器域名输入用户名 密码可以查询到FTP服务器中的目录和文件列表可以上传 下载文件 36 37 38 39 编辑框1IDC EDIT 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 voidCFtpDlg OnButtonCheck TODO AddyourcontrolnotificationhandlercodehereUpdateData TRUE if m ServerName IsEmpty 如果用户有输入才登陆FTP服务器查找CFtpConnection FtpConn m Session GetFtpConnection m ServerName m Name m Password 从CInternetSession中建立FTP连接CFtpFileFind pFtpFind newCFtpFileFind FtpConn 从FTP连接中建立FTP文件查找类实例BOOLbContinue pFtpFind FindFile if bContinue 如果一个文件都找不到 结束查找 pFtpFind Close pFtpFind NULL 创建FTP连接类对象 48 pFtpFind FindNextFile MSDN上讲述 在GetFileName 之前 必须调用一次FindNextFile 故原书上的例子有错CStringstrFileName while bContinue 找到了第一个文件 继续找其它的文件 strFileName pFtpFind GetFileName 获得找到的文件的文件名 如果找到的是否目录 将目录名放在括弧中if pFtpFind IsDirectory strFileName strFileName 将找到的文件或目录名显示在列表框中 m ListFile AddString strFileName bContinue pFtpFind FindNextFile 查找下一个文件 其他处理 比如用完之后的连接关闭等等 49 FTP工具 50 3COM3CDaemonServ UFTPServer建议大家回去试试 小结 51 TCP协议客户端能完成FTP协议客户端的功能 但是必须先了解FTP协议同理 TCP协议服务器能完成FTP协议服务器的功能利用Socket开发FTP这样的常见协议软件有点复杂 直接利用FTP相关类更方便些 52 6 6WinInet类编程实例 这一次我们要利用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 给应用程序增加一个自定义的类 单击Insert NewClass菜单 添加新类类名为CMyWinInetClass 系统会自动在项目中增加MyWinInetClass cpp和MyWinInetClass h两个文件 55 b 在新加入的类中增加如下三个public的成员函数 在头文件MyWinInetClass h中可看到这些函数 CStringConnectFtp constCStringsUrl 完成连接Ftp功能的函数CStringConnectHttp constCStringsUrl 完成连接Http功能的函数CStringConnectGopher constCStringsUrl 完成连接Gopher功能的函数 56 为了建立Internet的会话 新增加的CmyWinInetClass类中加入一个private型成员变量m session CInternetSessionm session 建立Internet会话由于在上面定义了一个CWinInet类的对象 所以还需要在MyWinInetClass h头文件中加入如下代码 include afxinet h include wininet h 57 为CMyWinInetClass类添加三个用于连接的成员函数 它们分别是ConnectFtp ConnectHttp和ConnectGopher CStringCMyWinInetClass ConnectFtp constCStringsUrl CStringsResult 存储连接信息的字符串CFtpConnection Ftpconnection NULL sResult sResult sResult TryingtoconnectFtpsites sUrl r n Ftpconnection m session GetFtpConnection sUrl 建立到Ftp服务器的连接 58 if Ftpconnection sResult sResult Connectionestablished r n CStringsCurDir Ftpconnection GetCurrentDirectory sCurDir 得到Ftp服务器的当前目录sResult sResult currentdirectoryis sCurDir r n Ftpconnection Close 关闭连接 else sResult sResult TherearesomeerrorsinfindingthisFtpsites returnsResult 59 CStringCMyWinInetClass 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 60 CStringCMyWinInetClass ConnectGopher constCStringsUrl CStringsResult CInternetFile hGopherFile NULL sResult sResult sResult TryingtoconnectGophersites sUrl r n hGopherFile CInternetFile m session OpenURL sUrl 得到文件指针if hGopherFile sResult sResult Connectionestablished r n CStringsLine while hGopherFile ReadString sLine 读取Gopher服务器内容sResult sResult sLine r n hGopherFile Close 结束连接 elsesResult sResult TherearesomeerrorsinfindingthisGophersites returnsResult 61 在CMyInternetDlg类中增加一个public成员变量CMyWinInetClassm WinInetClass 变量m WinInetClass是CMyWinInetClass类的一个对象 所以还要在WinInetDlg h头文件加入自定义类的头文件 include MyWinInetClass h 62 三个消息处理函数增加代码如下 voidCWinInetDlg OnButtonFtp UpdateData TRUE 从对话框读入地址信息m Urlm EditResult 调用自定义类的成员函数 连接Ftp服务器 m Url为地址m EditResult m EditResult m WinInetClass ConnectFtp m Url UpdateData FALSE voidCWinInetDlg OnButtonHttp UpdateData TRUE 从对话框读入地址信息m Urlm EditResult 调用自定义类的成员函数 连接Http服务器 m Url为地址m EditResult m EditResult m WinInetClass ConnectHttp m Url UpdateData FALSE 63 voidCWinInetDlg OnButtonGopher UpdateData TRUE 从对话框读入地址信息m Urlm EditResult 调用自定义类的成员函数 连接Gopher服务器 m Url为地址m EditResult m EditResult m WinInetClass ConnectGopher m Url UpdateData FALSE 64 65
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!