教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

网络编程实用教程_第5章

来源:网络收集 时间:2026-05-22
导读: 第5章 MFC WinSock类的编程 章 类的编程 为简化套接字网络编程,更方便地利用 Windows的消息驱动机制,微软的基础类库 (Microsoft Foundation Class Libary,简称 MFC),提供了两个套接字类,在不同的层次 上对Windows Socket API函数进行了封装,为 编写Windo

第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字,全部文档内容请下载后查看。喜欢就下载吧 ……
网络编程实用教程_第5章.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1812933.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)