没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
CAsyncScoket
CAsyncSocket 对象表示一个Windows Socket ──一个网络通信的末端。CAsyncSocket 类封闭了
Windows 套接字 API,对想使用与MFC 连接的Windows 套接字的程序员提供了一个面向对象的抽
象化概念。此类是假设已经理解了网络的通信的前提下的。负责处理块、字节排序差异以及Unicode
和多个字符集(MBCS)串的对话。如果想要一个更方便的处理这些问题的接口,请参阅CSocket 类。
要使用一个CAsyncSocket 对象,调用它的构造程序,然后调用Create 函数,创建一个基础套接字句
柄(SOCKET 类型),除了接收型套接字之外。对于一个服务器套接字调用Listen 成员函数,对于
一个客户套接字调用Connect 成员函数。在接收一个连接请求时,服务器套接字应该调用一个Accept
函数。使用保留的CAsyncSocket 函数解决套接字之间的通信。完成之后,如果它是在堆上被创建的,
就废弃掉CAsyncSocket 对象。析构程序自动调用Close 函数。SOCKET 数据类型在联机文档“Visual
C++ 程序员指南”中的“Windows 套接字:背景”章节中有所描述。如果要了解更多信息,请参阅联机
文档“Visual C++ 程序员指南”中的“Windows 套接字:使用CAsyncSocket 类”和相关章节以及联机文
档”Win32 SDK” 中的“Windows 套接字 2 的概述”和“Windows 套接字编程指南”。
#include<afxsock.h>
请参阅 CSocket,CSocketFile
CAsyncSocket 类的成员
构造函数
CasyncSocket
构造CAsyncSocket 对象
Create
创建套接字
属性
Attach
对CasyncSocket 对象附加套接字句柄
Detach
从CasyncSocket 对象除去套接字句柄
FromHandle
返回CasyncSocket 对象的指针,给出套接字句柄
GetLastError
获得上一次运行失败的状态
GetPeerName
获得与套接字连接的对等套接字的地址
GetSockName
获得套接字的本地名
GetSockOpt
获得套接字选项
SetSockOpt
设置套接字选项
运行
Accept
接受套接字上的连接
AsyncSelect
请求对于套接字的事件通知
Bind
与套接字有关的本地地址
Close
关闭套接字
Connect
对对等套接字建立连接
IOCtrl
控制套接字模式
Listen
建立套接字,侦听即将到来的连接请求
Receive
从套接字接收数据
ReceiveFrom
恢复数据报并且存储资源地址
Send
给连接套接字发送数据
SendTo
给特定目的地发送数据
ShutDown
使套接字上的Send 和/或Receive 调用无效
覆盖通知函数
OnAccept
通知侦听套接字,它可以通过调用Accept ,接受挂起连接请求
OnClass
通知套接字,关闭对它的套接字连接
OnConnect
通知连接套接字,连接尝试已经完成,无论成功或失败
OnOutOfBandData
通知接收套接字,在套接字上有带外数据读入,通常是忙消息
OnReceive
通知侦听套接字,通过调用Receive 恢复数据
OnSend
通知套接字,通过调用Send,它可以发送数据
数据成员
m_hSocket
指定附加在此CAsyncSocket 对象上的SOCKET 句柄
成员函数
CAsyncSocket::Accept
virtual BOOL Accept(CAsyncSocket& rConnectedSocket,SOCKADDR*
lpSockAddr=NULL,int*lpScokAddrLen=NULL);
返回值
如果函数是成功的,则返回非零值,否则为0。可以通过调用GetLastError 获取指定的错误
代码。此成员函数可用的错误如下:
z WSANOTINITIALISED 在使用此API 之前,必须有成功的AfxSocketInit 发生。
z WSAENETDOWN Windows Socket 实现可以查明网络子系统的失败。
z WSAEFAULT lpSockAddrLen 参数太小了(小于SOCKADDR 结构)。
z WSAEINPROGRESS 成块Windows 套接字调用正在进行中。
z WSAEINVAL 在接收之前没有侦听。
z WSAEMFILE 在接受入口处队列为空,并且没有有效的描述符。
z WSAENOBUFS 没有有效的缓冲区空间。
z WSAENOTSOCK 描述符不是套接字。
z WSAEOPNOTSUPP 应用的套接字不是支持面向连接服务的类型。
z WSAEWOULDBLOCK 套接字被标明为非成块状态,并且目前没有被接收的连接。
参数
rConnectedSocket
定义了对连接有效的新的套接字的参考。
lpSockAddr SOCKADDR 结构的指针,它接收连接套接字的地址,就象在网络中已知的那样。当套
接字被创建时,建立的地址体系确定lpSockAddr 参数的格式。如果lpSockAddr 和/或
lpSockAddrLen 等于NULL,则没有接受套接字的远程地址的信息返回。
lpSockAddrLen 指向lpSockAddr 中地址的字节长度的指针。lpSockAddr 是返回值型参数:初始时,
它应该包括通过lpSockAddr 指向的一些空间;返回时,它应该包括返回地址的实际字节长度。
说明
调用此成员函数,接受套接字上的连接。此例程获取挂起连接队伍中的连接,创建与此套接字特性
相同的新套接字并将其附加给rConnectedSocket 。如果队列中没有正挂起的连接,Accept 为0 。
GetLastError 返回错误。被接受的套接字(rConnectedSocket )不能用于接受多个连接。原先的套接
字保持打开和侦听的状态。lpSocketAddr 是结果参数,其值为连接套接字的地址,正如所知的通信
层一样。Accept 用于基于连接的套接字类型,例如SOCK_STREAM。
请参阅 CAnCSocket::Bind,CAsyncSocket::Connect,
CAsyncSocket::Listen,CAsyncSocket::Create::WSAAsyncSelect
CAsyncSocket::AsyncSelect
BOOL AsyncSelect(long lEvent=FD_READ|FD_WRITE|FD_OOB|
FD_ACCEPT|FD_CONNECT|FD_CLOSE);
返回值
如果函数成功,则返回非零值,否则为0。通过调用GetLastError 可获取特定的错误代码。以下就是
应用于此成员函数的错误:
z WSANOTINTIALISED 成功的AfxSocketInit 必须发生在使用此API 之前。
z WSAENETDOWN Windows 套接字工具测试出网络系统失败。
z WSAEINVAL 特定的参数之一无效。
z WSAEINPROGRESS 成块的Windows 套接字操作正在进行中。
参数
lEvent
位掩码,它指定了应用感兴趣的网络事件的组合。
z FD_READ 想要接收用于读取的读通知。
z FD_WRITE 当数据读取有效时,想要接收通知。
z FD_OOB 想要恢复带外的数据到达的通知。
z FD_ACCEPT 想要接收将要连接的通知。
z FD_CONNECT 想要接收连接结果的通知。
z FD_CLOSE 当套接字被测试关闭时,想要接收通知。
说明
调用此成员函数,请求用于套接字的事件通知。此函数用于指定哪些MFC 调用通知函数将被套接字
调用。ASyncSelect 自动将此套接字设置为非成块的模式。如果要了解更多信息,请参阅联机文档
“Visual C++ 程序员指南”中的“Windows 套接字:套接字通知”以及Win 32 SD 联机文档中的
“Windows 套接字编程指南”。
请参阅 CAsyncSocket::GetLastError,::WSAAsyncSelect
CAsyncSocket::Attach
BOOL Attach(SOCKET hSocket,long lEvent=FD_READ|READ|FD_WRITE|
FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSED);
返回值
如果成功,则返回非零值。
参数
hSocket
包含套接字的句柄。
lEvent
位掩码,它指定了应用感兴趣的网络事件的组合:
z FD_READ 想要接收用于读取的读通知。
z FD_WRITE 当数据读取有效时,想要接收通知。
z FD_OOB 想要恢复带外的数据到达的通知。
z FD_ACCEPT 想要接收将要连接的通知。
z FD_CONNECT 想要接收连接结果的通知。
z FD_CLOSE 当套接字被测试关闭时,想要接收通知。
说明
调用此函数将hSocket 句柄附加给CAsyncSocket 对象。SOCKET 句柄存储在对象的m_hSocket 数据
成员中。
请参阅 CAsyncSocket::Detach
CAsyncSocket::Bind
BOOL Bind(UINT nSocketPort,LPCTSTR lpszSocketAddress=NULL);
BOOL Bind(const SOCKADDR*lpSockAddr,int nSockAddrLen);
返回值
如果成功,则返回非零值,否则为0。通过调用GetLastError 获取特定的错误代码。以下为应用于此
成员函数的错误:
z WSANOTINTIALISED 成功的AfxSocketInit 必须发生在使用此API 之前。
z WSAENETDOWN Windows 套接字工具测试出网络系统失败。
z WSAEADDRINUSE 特定的地址已在使用中(请参阅在SetSocketOpt 下的SO_REUSESADDR
套接字选项)。
z WSAEFAULT nSockAddrLen 参数太小(小于SOCKETADDR 结构的大小)。
z WSAEINPROGRESS 成块的Windows 套接字操作正在进行中。
z WSAEAFNOSUPPORT 此端口不支持特定的地址体系。
z WSAEINVAL 套接字已被约束于地址上。
z WSAENOBUFS 由于连接太多,已经没有足够有效的缓冲空间。
z aWSAENOTSOCK 描述符不是套接字。
参数
nSocketPort
定义套接字应用的端口。
LpszSocketAddress
网络地址,用句点分隔的数值,如“128.56.22.8”。
lpSocketAddr
指向SOCKADDR 结构的指针。SOCKADDR 包含有分配给此套接字的地址。
NSockAddrLen
以字节计算的lpSocketAddr 中的地址长度。
说明
调用此成员函数,将本地地址与套接字相关联。在顺序Connect 或Listen 调用之前,此例程用在未
连接的数据报或数据套接字上。在它能够接受连接请求之前,侦听服务器套接字必须选择端口数并
且通过调用Bind 让Windows 套接字知道。Bind 通过将本地名分配给未命名的套接字,建立本地联
系(主机地址/端口数)。
请参阅 CAsyncSocket::Connect,CAsyncSocket::Listen,
CAsyncSocket::GetSockName,CAsyncSocket::SetSockOpt,
CAsyncSocket::Create
CAsyncSocket::CAsyncSocket
CAsyncSocket( );
说明
剩余25页未读,继续阅读
资源评论
笨笨仔
- 粉丝: 225
- 资源: 21
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功