📄 d083.bmp.txt
字号:
表3-5 CSyncSocket的可重载的消息响应函数
┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 函 数 ┃ 说 明 ┃
┣━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ OnAccept ┃ 通知监听的Socket,它可以通过调用Accept函数接受连接请求 ┃
┣━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ OnClose ┃ 通知Socket,与它相连接的Socket已经关闭 ┃
┣━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ OnConnect ┃ 通知一个正在连接的Socket,连接尝试已经完成,或者成功或者失败 ┃
┣━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃OnOutOfBandData ┃ 通知一个正在接收数据的Socket,有紧急数据到达 ┃
┣━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ OnReceive ┃ 通知Socket有数据到达,可以调用Receive函数去接收数据 ┃
┣━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ OnSend ┃ 通知Socket可以调用Send发送数据 ┃
┗━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
数据成员为rn hSocket,表示是与CAsyncSocket对象关联的Socket句柄。
2.CAsyncSocket编程模型
CAsyncSocket只是在一个很低的层次上封装了Windows Socket API,它当初设计主要是
为很熟悉网络通信细节的程序员写网络回调函数带来方便,所以CAsyncSocket只提供了一
些基本的操作。
调用CAsyncSocket类需要用到头文件<afxsock.h>。
创建和使用CAsyncSocket的步骤如下。
1)调用AfxSocketlnit()初始化WinSock.,
if (AfxS ocketInit(NULL)-.FALSE)
AfxMessageB oxC oMndowsSocket initial failed!”);
2)构造一个CAsyncSocket对象并且用这个对象创造一个Socket句柄。例如:
CAsyncSocket socket;
socket.Create0; ,/使用默认参数
或者,
CAsyncSocket* pSocket= new CAsyncSocket;
int nPort= 1227;
pSocket-> Create( nPort, SOCK_DGRAM);
第一种构造方法在堆栈上创建一个CAsyncSocket对象,第二个构造方法在堆区创建
CAsyncSocket。第一种方法中Create调用使用默认参数,创造了一个流式的Socket;第二
种方法中Create调用具有指定端口和地址的数据文报套接字,创造了一个数据报的Socket。
(任一个Create版本都可以和任一种构造方法一起使用。)
对于服务器端来说,必须在Create中指定一个端口;而对于客户端而言,不必去指定端
口,Winsock会自动选择一个端口。Bind0函数正是这样来做的,而在CasyncSocket肉部的
Create函数就是调用了Win32API的Bind()。
3)如果Socket是客户端,那么直接调用CAsyncSocket::Connect函数与服务器相连。如
果Socket是服务器端,那么应该调用CAsyncSocket::Listen去监听,一旦有连接请求到来,
则调用CAsyncSocket::Accept去构造一个会话Socket。
这里需要注意的是,与Win32API的Accept()函数不同,Accept()函数参数中需要引用一
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -