16.4 MFC对WinSocket API的封装
MFC提供两个类支持使用Windows Sockets API进行网络编程(www.cppentry.com)。类CAsyncSocket一对一地封装了Windows Sockets API。类CSocket提供了从CArchive对象中序列化数据的Sockets功能。本节将介绍这两个类及其使用。
16.4.1 CAsyncSocket类
为了简化套接字编程(www.cppentry.com),MFC使用CAsyncSocket类封装了Windows Sockets API。使用此类可以直接使用Sockets API编写灵活的程序,同时又可以方便地处理网络事件。除了使用C++(www.cppentry.com)将Sockets包装成面向对象的形式外,类还将与Sockets相关的Windows消息转换成事件通知。CAsyncSocket类的部分函数与Windows Socket API的函数是一对一的,但是简化了事件通知的开发过程。如表16-4所示为CAsyncSocket类中封装的通知事件。
表16-4 CAsyncSocket类的通知事件
|
事 件 名 称< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> |
触 发 情 况 |
|
OnAccept() |
当服务器套接字接收到客户端套
接字的连接请求,并且调用Accept()函
数接收客户端连接请求时,触发此事件 |
|
OnClose() |
当连接的套接字关闭时,触发此事件 |
|
OnConnect() |
当客户端套接字完成连接操作时,无论
连接成功还是连接失败都会触发此事件 |
|
OnOutOfBandData() |
当有带外数据需要读取时,触发此事件 |
|
OnReceive() |
当套接字调用Receive()函数从对端
套接字接收数据时,触发此事件 |
|
OnSend() |
当套接字调用Send()函数向对端套接字
发送数据时,触发此事件 |
上表中列出了CAsyncSocket类封装的通知事件,用户可以通过这些事件直接处理各种情况发生后的操作,而CAsyncSocket对象的函数与前面介绍过的WinSocket API有很多是对应的,用户对WinSocket API的原理理解透彻后,会发现使用CAsyncSocket类的函数进行套接字编程(www.cppentry.com)与使用WinSocket API是类似的。