预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共64页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

MFCWinSock类的编程 为简化套接字网络编程,更方便地利用Windows的消息驱动机制,微软的基础类库(MicrosoftFoundationClassLibary,简称MFC),提供了两个套接字类,在不同的层次上对WindowsSocketAPI函数进行了封装,为编写WindowsSocket网络通信程序,提供了两种编程模式。CAsyncSocket类,在很低的层次上对WindowsSocketsAPI进行了封装。 它的成员函数和WindowsSocketsAPI的函数调用直接对应。一个CAsyncSocket对象代表了一个Windows套接字。它是网络通信的端点。除了把套接字封装成C++的面向对象的形式供程序员使用以外,这个类唯一所增加的抽象就是将那些与套接字相关的Windows消息变为CAsyncSocket类的回调函数。CSocket类,从CAsyncSocket类派生,是对WindowsSocketsAPI的高级封装。CSocket类继承了CAsyncSocket类的许多成员函数,用法一致。CSocket类的高级表现在三个方面: (1)CSocket结合archive类来使用套接字。 (2)CSocket管理了通信的许多方面,如字节顺序问题和字符串转换问题。 (3)CSocket类为Windows消息的后台处理提供了阻塞的工作模式。这两个类提供了事件处理函数,编程者通过对事件处理函数进行重载,可方便地对套接字发送数据、接收数据等事件进行处理。同时,可以结合MFC的其它类来使用这两个套接字类,并利用MFC的各种可视化向导,从而大大简化了编程。 在MFC中,有一个名为afxSock.h的包含文件,在这个文件中定义了CAsyncSocket,CSocket,和CSocketFile这三个套接字类。CasyncSocket类 CAsyncSocket类从Cobject类派生而来,如图1所示:创建CasyncSocket类对象 本书将CAsyncSocket类对象称为异步套接字对象。创建异步套接字对象一般分为两个步骤,首先构造一个CAsyncSocket对象,再创建该对象的底层的SOCKET句柄。 1.创建空的异步套接字对象 通过调用CAsyncSocket类的构造函数,创建一个新的空CAsyncSocket类套接字对象,构造函数不带参数。然后必须调用它的Create成员函数,来创建底层的套接字数据结构,并绑定它的地址。有两种使用方法,会在不同的位置创建。 (1)如:CAsyncSocketaa; aa.Create(。。。。。。); (2)如:CAsyncSocket*Pa; Pa=newCAsyncSocket; Pa->Create(。。。。。。);2.创建异步套接字对象的底层套接字句柄 通过调用CAsyncSocket类的Create()成员函数,创建该对象的底层套接字句柄,决定套接字对象的具体特性。调用格式为: BOOLCreate(UINTnSocketPort=0, IntnSocketType=SOCK_STREAM, LongIevent=FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE, LPCTSTRlpszSocketAddress=NULL);举例:创建一个使用27端口的流式异步套接字对象。 CAsyncSocket*pSocket=newCAsyncSocket; intnPort=27; pSocket->Create(nPort,SOCK_STREAM);关于CAsyncSocket类可以接受并处理的消息事件 1.六种套接字相关的事件与通知消息 参数Ievent可以选用的六个符号常量是在winsock.h文件中定义的。 #defineFD_READ0x01 #defineFD_WRITE0x02 #defineFD_OOB0x04 #defineFD_ACCEPT0x08 #defineFD_CONNECT0x10 #defineFD_CLOSE0x20他们代表MFC套接字对象可以接受并处理的六种网络事件,当事件发生时,套接字对象会收到相应的通知消息,并自动执行套接字对象响应的事件处理函数。 (1)FD_READ事件通知:通知有数据可读。 (2)FD_WRITE事件通知:通知可以写数据。 (3)FD_ACCEPT事件通知:通知监听套接字有连接请求可以接受。 (4)FD_CONNECT事件通知:通知请求连接的套接字,连接的要求已被处理。 (5)FD_CLOSE事件通知:通知套接字已关闭。 (6)FD_OOB事件通知:通知将有带外数据到达。2.MFC框架对于六个网络事件的处理 当上述的网络事件发生时,MFC框架作何处理呢?按照Windo