6-WSAAsyncSelect模型课件.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6-WSAAsyncSelect模型课件

WSASsyncSelect模型 前面学习的Windows Sockets select模型。在应用程序中调用select()函数时,会发生阻塞现象。开发人员可以通过select()函数的timeout参数,设置函数调用的阻塞时间,在设定时间内,线程保持等待,直到其中的一个或者多个套接字满足可读或者可写的条件,该函数才返回。 WSAAsyncSelect模型是非阻塞的。如图所示,Windows Sockets 应用程序在调用recv()函数接收数据前,调用WSAAsyncselect()函数注册网络事件。WSAAsyncselect()函数立即返回,线程继续运行。当系统中数据准备好时,向应用程序发送消息。应用程序接收到这个消息后,调用recv()函数接收数据。 与select模型比较 WSAAsyncSelect模型与Select模型的相同点: 都可以对Windows套接字应用程序所使用的多个套接字进行有效的管理。 WSAAsyncSeelect模型与Select模型相比存在以下不同: WSAAsyncSelet模型是异步的。在应用程序中调用WSAAsyncSelect()函数,通知系统感兴趣的网络事件,该函数立即返回,应用程序继续运行。 发生网络事件时,应用程序得到通知的方式不同。Select()函数返回时,说明某个或者某些套接字满足可读可写的条件,应用程序需要使用FD_ISSET宏,判断套接字是否存在于可读可写集合中。而对于WSAAsyncSelect模型来说,当网络事件发生时,系统向应用程序发送消息。 WSAAsyncSelect模型应用在基于消息的Windows环境下,使用该模型时必须创建窗口。而Slelect模型广泛应用在Unix系统和Windows系统,使用模型不需要创建窗口。 应用程序中调用WSAAsyncSelect()函数后,自动将套接字设置为非阻塞模式。而应用程序中调用select()函数后,并不能改变该套接字的工作方式。 套接字WSAAsyncSelect模型实现 WSAAsyncSelect模型核心是WSAAsyncSelect()函数,该函数使得Windows应用程序能够接收网络事件消息。在应用程序窗口例程中对接收到的网络事件进行处理。 由于WSAAsyncSelect模型应用在基于消息的Windows应用程序中,所以本节还将讲解窗口例程和如何创建窗口等内容。 WSAAsynSelect()函数 int WSAAsyncSelect( SOCKET s, HWND hWnd, unsigned int wMsg, long lEvent ) s:需要事件通知的套接字。 hWnd: 当网络事件发生时接收消息的窗口句柄。 wWsg: 当网络事件发生时窗口收到的消息。 lEvent:应用程序感兴趣的网络事件集合。 应当用程序中调用该函数后,自动将套接字设置为非阻塞模式。 通常,应用程序声明的消息要比Windows的WM_USER值大,以避免该消息与Windows预定消息发生混淆。 注册哪种网络事件,取决于实际的需要。如果应用程序同时对多个网络事件感兴趣。需要对网络事件类型执行按位OR(或)运算。然后将它们分配给lEvent参数。 例如,应用程序希望在套接字上接收有关连接完成、数据可读和套接字关闭的网络事件。那么在应用程序中,调用WSAAsyncSelect()函数如下所示: WSAAsyncSelect(s, hWnd,WM_SOCKET, FD_CONNECT|FD_READ|FD_CLOSE); 当该套接字连接完成、有数据可读或者套接字关闭的网络事件事件发生时,就会有WM_SOCKET消息发送给窗口句柄为hWnd窗口。 窗口例程 当调用WSAAsyncselect()函数后,应用程序会在hWnd窗口例程,以消息形式接收网络事件通知。窗口例程是回调函数,当成功创建窗口后由系统调用。窗口例程声明如下: LRESULT CALLBACK WindowProc( HWND hWnd, //窗口句柄 UINT uMsg, //消息 WPARAM wParam, //消息参数 LPARAM lParam, //消息参数 ); hWnd:窗口句柄。 uMsg消息。对Windows Sockets应用程序来说感兴趣的是在 WSAAsyncSelect()函数中,由应用程序定义的消息。 wParam:消息参数。在 Windows Sockets应用程序中,该参数指明发生网络事件的套接字。 lParam: 消息参数。在 Windows sockets 应用程序中,该参数低字节指

您可能关注的文档

文档评论(0)

baa89089 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档