Network Programming for Windows读书笔记9

来源:互联网 发布:w7本机ip端口查询器 编辑:程序博客网 时间:2024/09/21 09:18

          WSAAsyncSelect

    Winsock提供了一个有用的异步I/O模型。利用这个模型,应用程序可在一个套接字上,接受以Windows消息为基础的网络事件通知.具体的做法是在建好一个套接字后,调用WSAAsyncSelect函数.该模型最早出现于Winsock的1.1版本中,用于帮助应用程序开发者面向一些早期的16位Windows平台(如windows for Workgroups),适应其"落后"的多任务消息环境.应用程序仍可从这种模型中得到好处,特别是它们用一个标准的Windows例程(常称为"winproc"),对窗口消息进行管理的时候。该模型亦得到了Microsoft  Foundation Class(微软基本类,MFC) 对象CSocket的采纳.

    消息通知

    要想使用WSAAsyncSelect模型,在应用程序中,首先必须用CreateWindow函数创建一个窗口,再为该窗口提供一个窗口例程支持函数(Winproc).亦可使用一个对话框,为其提供一个对话例程,而非窗口例程,因为对话框本质也是"窗口".考虑到我们的目的,我们打算用一个简单的窗口来演示这种模型,采用的是一个支持窗口例程.设置好窗口的框架后,便可开始创建套接字,并调用WSAAsyncSelect函数,打开窗口消息通知.该函数的定义如下:

    int WSAAsyncSelect(

               SOCKET  s,

               HWND hWnd,

               unsigned int wMsg,

               long lEvent

);

其中,s参数指定的是我们感兴趣的那个套接字。hWnd参数指定的是一个窗口句宾,它对应于网络事件之后,想要收到通知消息的那个窗口或对话框.wMsg参数指定在发生网络事件时,打算接受的消息.该消息会投递到由hWnd窗口句柄指定的那个窗口.通常,应用程序需要将这个消息设为比Windows的WM_USER大的一个值,避免网络窗口消息与预定义的标准窗口消息发生混淆与冲突.最后一个参数是lEvent,它指定的是一个位掩码,对应于一系列网络事件的组合,应用程序感兴趣的便是这一系列事件.大多数应用程序通常感兴趣的网络事件包括:FD_READ、FD_WRITE、FD_ ACCEPT、FD_CONNECT和FD_CLOSE.当然,到底使用FD_ACCEPT,还是使用FD_CONNECT类型,要取决于应用程序

原创粉丝点击