情境42消息队列管理程序设计2ppt课件.ppt_第1页
情境42消息队列管理程序设计2ppt课件.ppt_第2页
情境42消息队列管理程序设计2ppt课件.ppt_第3页
情境42消息队列管理程序设计2ppt课件.ppt_第4页
情境42消息队列管理程序设计2ppt课件.ppt_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

麦敬椿 消息队列管理程序设计 2 网络通信程序的框架 情境三 麦敬椿 本次讲授内容 网络通信程序设计的基本概念CAsyncSocket网络通信程序设计框架CSocket网络通信程序设计框架字符串 麦敬椿 一 网络通信程序设计的基本概念 近年来 利用Internet进行网际间通讯 在WWW浏览 FTP Gopher这些常规服务 以及在网络电话 多媒体会议等这些对实时性要求严格的应用中成为研究的热点 而且已经是必需的了 Windows环境下进行通讯程序设计的最基本方法是应用WindowsSockets实现进程间的通讯 为此微软提供了大量基于WindowsSockets的通讯API 如WinSockAPI WinInetAPI和ISAPI 并一直致力于开发更快 更容易的通讯API 将其和MFC集成在一起以使通讯编程越来越容易 麦敬椿 一 网络通信程序设计的基本概念 常规网络通信程序设计 麦敬椿 一 网络通信程序设计的基本概念 常规网络通信程序设计对于许多初学者来说 网络通信程序的开发 普遍的一个现象就是觉得难以入手 许多概念 诸如 同步 Sync 异步 Async 阻塞 Block 非阻塞 Unblock 等 初学者往往迷惑不清 只知其所以而不知起所以然 麦敬椿 一 网络通信程序设计的基本概念 常规网络通信程序设计同步方式指的是发送方不等接收方响应 便接着发下个数据包的通信方式 而异步指发送方发出数据后 等收到接收方发回的响应 才发下一个数据包的通信方式 阻塞套接字是指执行此套接字的网络调用时 直到成功才返回 否则一直阻塞在此网络调用上 比如调用recv 函数读取网络缓冲区中的数据 如果没有数据到达 将一直挂在recv 这个函数调用上 直到读到一些数据 此函数调用才返回 麦敬椿 一 网络通信程序设计的基本概念 常规网络通信程序设计非阻塞套接字是指执行此套接字的网络调用时 不管是否执行成功 都立即返回 比如调用recv 函数读取网络缓冲区中数据 不管是否读到数据都立即返回 而不会一直挂在此函数调用上 在实际Windows网络通信软件开发中 异步非阻塞套接字是用的最多的 平常所说的C S 客户端 服务器 结构的软件就是异步非阻塞模式的 麦敬椿 一 网络通信程序设计的基本概念 微软MFC网络通信程序概述微软的MFC把复杂的WinSockAPI函数封装到类里 这使得编写网络应用程序更容易 CAsyncSocket类逐个封装了WinSockAPI 为高级网络程序员提供了更加有力而灵活的方法 MFC给出了CSocket类 这个类是由CAsyncSocket类继承下来的 它提供了比CAsyncSocket更高层的WinSockAPI接口 Csocket类和CsocketFile类可以与Carchive类一起合作来管理发送和接收的数据 这使管理数据收发更加便利 麦敬椿 一 网络通信程序设计的基本概念 微软MFC网络通信程序概述CSocket对象提供阻塞模式 这对于Carchive的同步操作是至关重要的 阻塞函数 如Receive Send ReceiveFrom SendTo 和Accept 直到操作完成后才返回控制权 因此如果需要低层控制和高效率 就使用CasyncSock类 如果需要方便 则可使用Csocket类 在Win32环境下 如果要使用具有阻塞性质的套接字 应该放在独立的工作线程中处理 利用多线程的方法使阻塞不至于干扰其他线程 也不会把CPU时间浪费在阻塞上 多线程的方法既可以使程序员享受CSocket带来的简化编程的便利 也不会影响用户界面对用户的反应 麦敬椿 二 CAsyncSocket网络程序设计框架 在一个MFC应用程序中 要想轻松处理多个网络协议 而又不牺牲灵活性时 可以考虑使用CAsyncSocket类 它的效率比CSocket类要高 CAsyncSocket类针对字节流型套接字的编程模型简述如下 构造一个CAsyncSocket对象 并用这个对象的Create成员函数产生一个Socket句柄 CAsyncSocketsock 使用默认参数产生一个字节流套接字Sock Create CAsyncSocket pSocket newCAsyncSocket intnPort 27 pSocket Create nPort SOCK DGRAM 麦敬椿 二 CAsyncSocket网络程序设计框架 构造一个CAsyncSocket对象 并用这个对象的Create成员函数产生一个Socket句柄 第一种方法在栈上产生一个CAsyncSocket对象 而第二种方法在堆上产生CAsyncSocket对象 第一种方法中Create 成员函数用缺省参数产生一个字节流套接字 第二种方法中用Create 成员函数在指定的端口产生一个数字报套接字 麦敬椿 二 CAsyncSocket网络程序设计框架 构造一个CAsyncSocket对象 并用这个对象的Create成员函数产生一个Socket句柄 BOOLCreate UINTnSocketPort 0 intnSocketType SOCK STREAM LPCTSTRlpszSocketAddress NULL 该函数的参数有 1 端口 UINT类型 注意 如果是服务方 则使用一个众所周知的端口供服务方连接 如果是客户方 典型做法是接受默认参数 使套接字可以自主选择一个可用端口 2 socket类型 可以是SOCK STREAM 默认值 字节流 或SOCK DGRAM 数据报 3 socket的地址 例如 或 202 193 64 33 麦敬椿 二 CAsyncSocket网络程序设计框架 通信双方建立连接关系 如是客户方程序 用CAsyncSocket Connect 成员函数连接到服务方 如是服务方程序 用CAsyncSocket Listen 成员函数开始监听 一旦收到连接请求 则调用CAsyncSocket Accept 成员函数开始接收 注意 CAsyncSocket Accept 成员函数要用一个新的并且是空的CAsyncSocket对象作为它的参数 这里所说的 空的 指的是这个新对象还没有调用Create 成员函数 麦敬椿 二 CAsyncSocket网络程序设计框架 调用CAsyncSocket类的其他函数 如 Receive ReceiveFrom Send 和SendTo 等成员函数进行数据通信 通讯结束后 销毁CAsyncSocket对象 如果是在栈上产生的CAsyncSocket对象 则对象超出定义的范围时自动被析构 如果是在堆上产生 也就是用了new这个操作符 则必须使用delete操作符销毁CAsyncSocket对象 麦敬椿 三 CSocket网络程序设计框架 使用CSocket对象涉及CArchive和CSocketFile类对象 以下介绍的针对字节流型套接字的操作步骤中 只有第3步对于客户方和服务方操作是不同的 其他步骤都相同 构造一个CSocket对象 使用这个对象的Create 成员函数产生一个socket对象 在客户方程序中 除非需要数据报套接字 Create 函数一般情况下应该使用默认参数 而对于服务方程序 必须在调用Create时指定一个端口 需要注意的是 Carchive类对象不能与数据报 UDP 套接字一起工作 麦敬椿 三 CSocket网络程序设计框架 通信双方建立连接 如果是客户方套接字 则调用CAsyncSocket Connect 函数与服务方套接字连接 如果是服务方套接字 则调用CAsyncSocket Listen 开始监听来自客户方的连接请求 收到连接请求后 调用CAsyncSocket Accept 函数接受请求 建立连接 请注意Accept 成员函数需要一个新的并且为空的CSocket对象作为它的参数 麦敬椿 三 CSocket网络程序设计框架 产生一个CSocketFile对象 并把它与CSocket对象关联起来 为接收和发送数据各产生一个CArchive对象 把它们与CSocketFile对象关联起来 切记CArchive是不能和数据报套接字一起工作的 使用CArchive对象的Read Write 等函数在客户与服务方传送数据 通讯完毕后 销毁CArchive CSocketFile和CSocket对象 麦敬椿 四 字符串 字符串 字符串是由某字符集上的字符所组成的任何有限字符序列 当一个字符串不包含任何字符时 称

温馨提示

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

评论

0/150

提交评论