Socket工作模式之WSAAsyncSelect模子

藏宝库编辑 2024-9-24 15:03:48 133 0 来自 中国
WSAAsyncSelect(异步选择)模子

①WSAAsyncSelect(异步选择)模子先容
Windows Sockets为了支持Windows消息驱动机制,使开发者可以大概方便地处理处罚网络通讯,它对网络事件接纳基于消息的异步存取计谋。该异步计谋紧张是通过异步选择函数WSAAsyncSelect()来实现的,该函数提供了消息机制的网络事件选择,当使用它登记的网络事件发生时,Windows应用步调相应的窗口函数收发消息,消息中指示了发生的网络事件,以及与事件相关的一些信息。
基于Windows消息机制的异步I/O模子。当有注册的消息机制到达时,体系举行关照,窗口对此消息举行处理处罚。现实上是基于Windows消息机制的一种模子。
应用步调调用WSAAsyncSelect函数后主动将套接字设为非壅闭模式。而在使用select()函数时,并没有改变套接字工作方式。
②相应函数

int WSAAsyncSelect(SOCKET s, HWND hWnd, unsigned int wMsg, long IEvent);
功能:对套接字检测IEvent指定的网络时间,假如有事件发生,则给窗口hWnd发送消息wMsg。如指定了监测FD_READ事件,当读数据时不管是否读到数据都立刻返回,假如返回一个错误信息表示还在等候,而在等候的数据到达后,就会发送消息wMsg给窗口hWnd,应用步调处理处罚该消息读取网络数据。
参数:
s:要绑定的socket。
hWnd:是处理处罚消息的窗口句柄。
wMsg:当网络事件发生时给窗口的消息,这个消息必要自己界说。
IEvent:要处理处罚的网络事件。
启动WSAAsyncSelect()将使为同一个套接字启动的全部先前的WSAAsyncSelect()作废,假如吸取读写关照WSAAyncSelect(s, hWnd, wMdg, FD_READ|FD_WRITE);而对不同的事件区分不同的消息是错误的(对同一个套接字针对不同的网络事件以不同的消息关照是不能的,由于在同一个套接字上消息是要划一的),如
WSAAsyncSelect(s, hWnd, wMsg1, FD_READ);
WSAAsyncSelect(s, hWnd, wMsg2, FD_WRITE);
界说后只有末了一次使用的有效,即只有FD_WRITE会通过wMsg2消息关照到,也就是假如要关照多个事件可以用或的情势将多个事件名称写在一起。另外假如要取消全部关照则:WSAAsyncSelect(s, hWnd, 0, 0);
大概流程:
SOCKET s;
HWND hWnd;
#define WM_NET_MSG WM_USER+1
int iRet=WSAAsyncSelect(s, this, WM_NET_MSG, FD_READ|FD_WRITE|FD_ACCEPT);
if(iRet !=0)
GetLastError();
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2025-4-28 12:37, Processed in 0.143770 second(s), 33 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表