版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、消息队列管理程序设计(2),网络通信程序的框架,情境三:,本次讲授内容,网络通信程序设计的基本概念 CAsyncSocket网络通信程序设计框架 CSocket网络通信程序设计框架 字符串,一、网络通信程序设计的基本概念,近年来,利用Internet进行网际间通讯,在WWW浏 览、FTP、Gopher这些常规服务,以及在网络电话、多媒体会议等这些对实时性要求严格 的应用中成为研究的热点,而且已经是必需的了。 Windows环境下进行通讯程序设计的最基本方法是应用Windows Sockets实现进程间的通讯,为此微软提供了大量基于Windows Sockets的通讯API,如WinSockAP
2、I、WinInetAPI和ISAPI,并一直致力于开发更快、 更容易的通讯API,将其和MFC集成在一起以使通讯编程越来越容易。,一、网络通信程序设计的基本概念,常规网络通信程序设计,一、网络通信程序设计的基本概念,常规网络通信程序设计 对于许多初学者来说,网络通信程序的开发,普遍的一个现象就是觉得难以入手。许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等,初学者往往迷惑不清,只知其所以而不知起所以然。,一、网络通信程序设计的基本概念,常规网络通信程序设计 同步方式指的是发送方不等接收方响应,便接着发下个数据包的通信方式;而异步指发送方发出数
3、据后,等收到接收方发回的响应,才发下一个数据包的通信方式 。 阻塞套接字是指执行此套接字的网络调用时,直到成功才返回,否则一直阻塞在此网络调用上,比如调用recv()函数读取网络缓冲区中的数据,如果没有数据到达,将一直挂在recv()这个函数调用上,直到读到一些数据,此函数调用才返回;,一、网络通信程序设计的基本概念,常规网络通信程序设计 非阻塞套接字是指执行此套接字的网络调用时,不管是否执行成功,都立即返回。比如调用recv()函数读取网络缓冲区中数据,不管是否读到数据都立即返回,而不会一直挂在此函数调用上。 在实际Windows网络通信软件开发中,异步非阻塞套接字是用的最多的。平常所说的C
4、/S(客户端/服务器)结构的软件就是异步非阻塞模式的。,一、网络通信程序设计的基本概念,微软MFC网络通信程序概述 微软的MFC把复杂的WinSock API函数封装到类里,这使得编写网络应用程序更容易。CAsyncSocket类逐个封装了WinSock API,为高级网络程序员 提供了更加有力而灵活的方法。 MFC给出 了CSocket类,这个类是由CAsyncSocket类继承下来的,它提供了比CAsyncSocket更高层的WinSock API接口。 Csocket类和CsocketFile类可以与Carchive类一起合作来管理发送和接收的数据,这使管理数据收发更加便利。,一、网络通
5、信程序设计的基本概念,微软MFC网络通信程序概述 CSocket对象提供阻塞模式,这对于Carchive的同步操作是至关重要的。阻塞函数(如Receive()、Send()、ReceiveFrom()、SendTo() 和Accept())直到操作完成后才返回控制权 。 因此如果需要低层控制和高效率,就使用CasyncSock类;如果需要方便,则可使用Csocket类。 在Win32环境下,如果要使用具有阻塞性质的套接字,应该放在独立的工作线程中处理,利用多线程的方法使阻塞不至于干扰其他线程,也不会把CPU时间浪费在阻塞上。多线程的方法既可以使程序员享受CSocket带 来的简化编程的便利,也
6、不会影响用户界面对用户的反应。,二、CAsyncSocket网络程序设计框架,在一个MFC应用程序中,要想轻松处理多个网 络协议,而又不牺牲灵活性时,可以考虑使用CAsyncSocket类,它的效率比CSocket 类要高。CAsyncSocket类针对字节流型套接字的编程模型简述如下: 构造一个CAsyncSocket对象,并用这个 对象的Create成员函数产生一个Socket句柄 。 CAsyncSocket sock; /使用默认参数产生一个字节流套接字 Sock.Create(); 。 CAsyncSocket*pSocket=newCAsyncSocket; intnPort=27
7、; pSocket-Create(nPort,SOCK-DGRAM); 。,二、CAsyncSocket网络程序设计框架,构造一个CAsyncSocket对象,并用这个 对象的Create成员函数产生一个Socket句柄 。 第一种方法在栈上产生一个CAsyncSocket对象, 而第二种方法在堆上产生CAsyncSocket对象;第一种方法中Create()成员函数用缺省参数产生一个字节流套接字,第二种方法中用Create()成员函数在指定的端口产生一个数字报套接字。,二、CAsyncSocket网络程序设计框架,构造一个CAsyncSocket对象,并用这个 对象的Create成员函数产生
8、一个Socket句柄 。 BOOL Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, LPCTSTR lpszSocketAddress = NULL ); 该函数的参数有: 1)端口,UINT类型。注意:如果是服务方,则使 用一个众所周知的端口供服务方连接;如果是客户方,典型做法是接受默认参数,使 套接字可以自主选择一个可用端口; 2)socket 类型,可以是SOCK-STREAM(默认值,字节流)或SOCK-DGRAM(数据报); 3)socket的地址,例如或3。,二、CAsyncSocke
9、t网络程序设计框架,通信双方建立连接关系 。 如是客户方程序,用CAsyncSocketConnect()成员函数连接到服务方 。 如是服务方程序,用CAsyncSocketListen()成员函数开始 监听,一旦收到连接请求,则调用CAsyncSocketAccept()成员函数开始接收。 注意:CAsyncSocket Accept()成员函数要用一个新的并且是空的CAsyncSocket对象作为它的参数,这里所说 的空的指的是这个新对象还没有调用Create()成员函数。,二、CAsyncSocket网络程序设计框架,调用CAsyncSocket类的其他函数,如:Receive()、Re
10、ceiveFrom()、Send()和SendTo()等成员函数进行数据通信。 通讯结束后,销毁CAsyncSocket对象。如果是在栈上产生的CAsyncSocket对象,则对象超出定义的范围时自动被析构;如果是在堆上产生,也就是用了new这个操作符,则必须使用delete操作符销毁CAsyncSocket 对象。,三、CSocket网络程序设计框架,使用CSocket对象涉及CArchive和CSocketFile 类对象。以下介绍的针对字节流型套接字的操作步骤中,只有第3步对于客户方和服务方操作是不同的,其他步骤都相同。 构造一个CSocket对象 。 使用这个对象的Create()成员
11、函数产生一个socket对象。 在客户方程序中,除非需要数据报套接字,Create()函数一般情况下应该使用默认参数。 而对于服务方程序,必须在调用Create时指定一个端口。 需要注意的是,Carchive类对象不能与数据报(UDP)套接字一起工作。,三、CSocket网络程序设计框架,通信双方建立连接。 如果是客户方套接字,则调用CAsyncSocket Connect()函数与服务方套接字连接。 如果是服务方套接字,则调用CAsyncSocketListen()开始监听来自客户方的连接请求,收到连接请求后,调用CAsyncSocketAccept()函数接受请求,建立连接。 请注意Acc
12、ept()成员函数需要一个新的并且为空的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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环境清洁卫生清扫制度
- 产品运营时间管理制度
- 水利水管单位财务制度
- 制造业小公司财务制度
- 小区卫生工作制度
- 校外托管食品卫生制度
- 基督教场所财务制度
- 如何管理新公司财务制度
- 省外办财务制度
- 食堂卫生奖罚管理制度
- 妇幼卫生上报管理制度
- (新教材)2026年春期部编人教版二年级下册语文教学计划及进度表
- 湿疹患者的护理查房
- 2026黑龙江省文化和旅游厅所属事业单位招聘工作人员21人考试参考试题及答案解析
- 破产管理人业务培训制度
- 环境应急培训课件
- 2026河南郑州信息工程职业学院招聘67人参考题库含答案
- 2026年中国烟草招聘笔试综合知识题库含答案
- 安排工作的协议书
- 医疗机构药品配送服务评价体系
- 业务持续性与灾难恢复模板
评论
0/150
提交评论