网络编程实用教程_第5章
第5章 MFC WinSock类的编程 章 类的编程 为简化套接字网络编程,更方便地利用 Windows的消息驱动机制,微软的基础类库 (Microsoft Foundation Class Libary,简称 MFC),提供了两个套接字类,在不同的层次 上对Windows Socket API函数进行了封装,为 编写Windows Socket网络通信程序,提供了两 种编程模式。
CAsyncSocket 类 , 在 很 低 的 层 次 上 对 Windows Sockets API进行了封装。 它的成员函数和Windows Sockets API 的函数调用直接对应。一个CAsyncSocket 对象代表了一个Windows套接字。它是网络 通信的端点。除了把套接字封装成C++的面 向对象的形式供程序员使用以外,这个类唯一 所增加的抽象就是将那些与套接字相关的 Windows消息变为CAsyncSocket类的回调 函数。
CSocket类,从CAsyncSocket类派生,是对 Windows Sockets API 的 高 级 封 装 。 CSocket类继承了CAsyncSocket类的许多成 员函数,用法一致。CSocket类的高级表现在 三个方面: (1)CSocket结合archive类来使用套接字。 (2)CSocket管理了通信的许多方面,如字 节顺序问题和字符串转换问题。 (3)CSocket类为Windows消息的后台处 理提供了阻塞的工作模式。
这两个类提供了事件处理函数,编程者通过 对事件处理函数进行重载,可方便地对套接字 发送数据、接收数据等事件进行处理。同时, 可以结合MFC的其它类来使用这两个套接字类, 并利用MFC的各种可视化向导,从而大大简化 了编程。 在MFC中,有一个名为afxSock.h的包含 文件,在这个文件中定义了CAsyncSocket, CSocket,和CSocketFile这三个套接字类。
5.1 CasyncSocket类 类 CAsyncSocket类从Cobject类派生而来,如图5.1所示:
图5.1 CAsyncSocket类的派生关系
5.1.1 使用 使用CAsyncSocket类的一般步骤 类的一般步骤网络应用程序一般采用客户/服务器模式,它 们使用使用CAsyncSocket类编程的步骤有所不同, 参看表5.1。 序号 1 2 3 4 服务器(Server)//构造一个套接字 ACsyncSocket sockSrvr; //创建Socket句柄到指定端口 sockSrvr.Create(nPort); //启动监听,准备接受请假 sockSrvr.Listen(); //请求连接到服务器 sockClient.Connect()
客户机(Client)//构造一个套接字 ACsyncSocket sockClient; //创建Socket句柄,参数默认 sockClient.Create();
5.1.2 创建 创建CasyncSocket类对象 类对象 本书将CAsyncSocket类对象称为异步套接 字对象。创建异步套接字对象一般分为两个步 骤,首先构造一个CAsyncSocket对象,再创 建该对象的底层的SOCKET句柄。 1.创建空的异步套接字对象 . 通过调用CAsyncSocket类的构造函数,创 建一个新的空CAsyncSocket类套接字对象, 构造函数不带参数。然后必须调用它的Create 成员函数,来创建底层的套接字数据结构,并 绑定它的地址。
有两
种使用方法,会在不同的位置创建。 (1)如:CAsyncSocket aa; aa.Create(。。。。。。); (2)如: CAsyncSocket* Pa; Pa = new CAsyncSocket; Pa->Create(。。。。。。);
2.创建异步套接字对象的底层套接字句柄 . 通过调用CAsyncSocket类的Create()成员函数, 创建该对象的底层套接字句柄,决定套接字对象的具 体特性。调用格式为:BOOL Create( UINT nSocketPort=0, Int nSocketType = SOCK_STREAM, Long Ievent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT |FD_CONNECT | FD_CLOSE, LPCTSTR lpszSocketAddress = NULL );
举例:创建一个使用27端口的流式异步套接字 对象。CAsyncSocket* pSocket = new CAsyncSocket; int nPort = 27; pSocket->Create( nPort, SOCK_STREAM );
5.1.3 关于 关于CAsyncSocket类可以接受并处理的 类可以接受并处理的 消息事件 1.六种套接字相关的事件与通知消息 . 参数Ievent可以选用的六个符号常量是在winsock.h 文件中定义的。 #define FD_READ #define FD_WRITE #define FD_OOB #define FD_ACCEPT #define FD_CONNECT #define FD_CLOSE 0x01 0x02 0x04 0x08 0x10 0x20
他们代表MFC套接字对象可以接受并处理的六种网 络事件,当事件发生时,套接字对象会收到相应的 通知消息,并自动执行套接字对象响应的事件处理 函数。 (1)FD_READ事件通知:通知有数据可读。 (2)FD_WRITE事件通知:通知可以写数据。 (3)FD_ACCEPT事件通知:通知监听套接字有 3 FD_ACCEPT 连接请求可以接受。 (4)FD_CONNECT事件通知:通知请求连接的 套接字,连接的要求已被处理。 (5)FD_CLOSE事件通知:通知套接字已关闭。 (6)FD_OOB事件通知:通知将有带外数据到达。
2.MFC框架对于六个网络事件的处理 . 框架对于六个网络事件的处理 当上述的网络事件发生时,MFC框架作何处理 呢?按照Windows的消息驱动机制,MFC框 架应当把消息发送给相应的套接字对象,并调 用作为该对象成员函数的事件处理函数。事件 与处理函数是一一映射的。
在afxSock.h文件中的CAsyncSocket类的声明中, 定义了与这六个网络事件对应的事件处理函数。 virtual void OnReceive(int 对应 FD_READ事件 virtual void OnSend(int 对应 FD_WRITE事件 virtual void OnAccept(int 对应 FD_ACCEPT事件 virtual void OnConnect(int 对应 FD_CONNECT事件 nErrorCode); nErrorCode); nErrorCode); nErrorCode);
virtual void OnClose(int nErrorCode); 对应 FD_CLOSE事件 virtual void OnOutOfBandData(int nErrorCode); 对应 FD_OOB事件
当某个网络事件发生时,MFC框架会自动调 用套接字对象的对应的事件处理函数。这就相 当给了套接字对象一个通知,告诉它某个重要 的事件已经发生。所以也称之为套接字类的通 知函数(notification functions)或回调函数 (callback functions)。
3.重载套接字对象的回调函数 . 如果你
从CAsyncSocket类派生了自己的套接 字类,你必须重载你的应用程序所感兴趣的那 些网络事件所对应的通知函数。 MFC框架自动调用通知函数,使得你可以在套 接字被通知的时候来优化套接字的行为。
…… 此处隐藏:1653字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [教育文库]夜场KTV服务员的岗位职责及工作流程[1]
- [教育文库]企划、网络、市场绩效考核方案
- [教育文库]学党史、知党情、强党性--“党的基本理
- [教育文库]2016年高考物理大一轮总复习(江苏专版
- [教育文库]干部廉洁自律自查自纠的报告
- [教育文库]2010年北京大学心理学系拟录取硕士研究
- [教育文库]资金时间价值练习题及答案
- [教育文库]保护环境的心得体会
- [教育文库]英语角内容:英语趣味小知识
- [教育文库]档案收集与管理工作通知
- [教育文库]劳动规章制度范本范本
- [教育文库]高考物理一轮复习课后限时作业1运动的
- [教育文库]机械工艺夹具毕业设计195推动架设计说
- [教育文库]通用技术教学比赛说课稿2
- [教育文库]2018年四年级英语下册 Module 7 Unit 2
- [教育文库]第2章 宽带IP网络的体系结构
- [教育文库]九年级化学第五单元课题3《根据化学方
- [教育文库]小学英语六年级情态动词用法归纳
- [教育文库]甲级单位编制窑井盖项目可行性报告(立
- [教育文库]2016-2021年中国城市规划行业全景调研
- 高考英语听力十大场景词汇总结
- 全省领导班子思想政治建设座谈会会议精
- 人教版新课标高一英语提优竞赛试题 下
- 江西省2014年生物中考试题
- 长沙镇食品药品安全事故应急预案
- 《金刚石、石墨和C60》片段教学设计
- 福州教育学院(王旭东)
- 基于EDA音乐播放器的设计
- 9、古诗两首《夜书所见》《九月九日忆
- 小学语文课外阅读有效策略探讨
- 贵州文化产业发展成支柱产业的问卷调查
- 膀胱类癌的诊治体会(附3例报告)
- 发动机积碳产生的原因
- Configuring Code Composer Studio for
- 学生良好的心理素质如何培养点滴谈
- 46 电沉积法制备锂离子电池用硅-锂薄膜
- 美舍雅阁公司管理中各部门职责
- 去壳剥皮的小妙招
- 六自由度运动平台的仿真研究
- Pride and Prejudice(傲慢与偏见)




