Winsock异步事件通知模型WSAAsyncSelect

转载 2007年09月15日 12:26:00
2007-03-23 22:01

1.  WSAAsyncSelect 使用此模型,应用程序可在一个套接字上进行以windows消息为基础的网络事件通知,此模型提供了读写数据能力的异步通知,但不提供异步数据传送。异步数据传送有“重叠及完成端口模型提供”。

使用方法可分为:

{1}初始化套接字相关信息:

(2) 开始启动一个事件通知。WSAAsyncSelect(Sock, hWnd, 自定义消息, 网络事件)

(3) 响应窗口的自定义消息处理函数, 其中lparam的高位字包含了可能出现的错误

代码,低字节表示发生的网络事件。wParam表示发生网络事件的套接字。

WSAGETSELECTERROR(lParam);  //查看是否出现错误,获取低字节位

WSAGETSELECTEVENT(lParam);  //查看发生了什么事件,获取高字节位

事件种类请查看MSDN,可用WSAGetLastError()来获取错误信息。

 

注意:多个事件务必在套接字上一次完成注册。

     一旦在某个套接字上启用了事件通知,注册过的事件将一直有效,除非明确调用closesocket命令,或针对这个套接字再调用WSAAsyncSelect更改注册过的网络事件。

 

优点:可在系统开销不大的情况下同时处理许多连接。

缺点:即使用不需要窗口(如服务器,控制台)它也不得不额外使用一个窗口。同时如果处理成千上万套接字的所有事件,性能可想而知。

MFCCSocket所使用的正是这种事件通知模型

 

如自定的消息响应函数为;响应的事件为FD_ACCEPT

OnSockAccept(WPARAM wParam, LPARAM lParam)

{

    If (WSAGETSELECTERROR(lParam) )

      {

            //有错误发生,可用WSAGetLastError获取错误

}

SOCKET Accept;

Accept = accept ( (SOCKET)wParam, NULL, NULL);

//接下来可再注册相应的事件通知

WSAAsyncSelect( Accept, 窗口句柄, 自定义的消息响应, 网络事件FD_READ |

FD_CLOSE或其它);

}

如果有服务器端,则在创建并绑定套接字之后,监听开始之前就须开始事件通知

其它socket模型待续...

 

多种SOKECT通讯模型的理解(select,WSAAsyncSelect,WSAEventSelect,Overlapped I/O 事件通知,Overlapped I/O 完成例程,IOCP)

老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系。他们的信会被邮递员投递到他们的信箱里。   这和Socket模型非常类似。下面我就以老陈接收信件为例讲解SocketI/O模型。  ...
  • fion45
  • fion45
  • 2013年10月10日 08:35
  • 4179

WinSock IO模型四: 重叠I/O (事件通知)

目录: 1. 重叠模型的优点 2. 重叠模型的基本原理 3. 关于重叠模型的基础知识 4. 重叠模型的实现步骤 5. 多客户端情况的注意事项   一. 重叠模...
  • zhu2695
  • zhu2695
  • 2013年03月24日 11:29
  • 717

winsock IO 模型---重叠IO之事件通知 example code

// OverlappedIO.cpp  IO重叠之事件通知example cpp#include "stdafx.h"   using std::map;  #define DATA_BUFSIZE...
  • mrliko
  • mrliko
  • 2011年01月13日 13:57
  • 604

Winsock I/O模型之WSAAsyncSelect

Winsock提供了一个很有用的异步I/O模型,利用这个模型,应用程序可以在一个套接字上接收以Windows消息为基础的网络事件通知。这个模型最开始出现在Winsock 1.1版本中,是为了帮助开...

winsock -WSAAsyncSelect函数的网络事件类型表

1. WSAAsyncSelect 基于win事件机制处理的异步消息。 在使用异步网络中WSAAsyncSelect,需要处理的步骤: { 1.在WM_CREATE消息处理函数中,初始化Wind...

Winsock编程——WSAAsyncSelect模型

Winsock编程接口的 WSAAsyncSelect 模型以 WSAAsyncSelect 函数为中心。 WSAAsyncSelect模型把网络事件通知转换为Windows消息,发送到指定的窗...

WinSock学习(2):WSAAsyncSelect模型

学的比较匆忙,有错误请指出 //user define #include #include #pragma comment(lib,"ws2_32.lib") #define BTN...
  • sryan
  • sryan
  • 2012年02月16日 15:56
  • 1245

Winsock 网络编程 Socket模型之WSAAsyncSelect模型

前言: 讲一下套接字模式和套接字I/O模型的区别。先说明一下,只针对Winsock 套接字模式:阻塞套接字和非阻塞套接字。或是叫同步套接字和异步套接字。 套接字模型:描述如何对套接字的I/O...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Winsock异步事件通知模型WSAAsyncSelect
举报原因:
原因补充:

(最多只允许输入30个字)