网络编程WSAasyselect模型.ppt

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

WSAAsyncSelect模型 WSAAsyncSelect模型是Windows Sockets的一个I/O模型,利用该模型应用程序可以在一个套接字上,接收以Windows消息为基础的网络事件。 Windows Sockets应用程序在创建套接字后,调用WSAAsyncSelect函数注册感兴趣的网络事件。当该事件发生时Windows窗口收到消息,然后应用程序就可以对接收到的网络事件进行处理。 WSAAsyncSelect模型是非阻塞的。 与Selcect模型的比较 相同点: 都可以对Windows套接字应用程序所使用的多个套接字进行有效的管理。 不同点: WSAAsynselcet模型是异步的,在应用程序中调用WSAAsynselcet()函数,通知系统感兴趣的网络事件,该函数立刻返回,应用程序继续运行。 在发生网络事件时,应用程序得到的通知方式不同,select返回时,会利用FD_ISSET判断套接字是否存在于可读可写集合中。WSAAsynselcet模型则是由操作系统向应用程序发送消息。 WSAAsynselcet模型应用在基于消息的Windows环境下,使用该模型必须创建窗口,而Select模型则广泛用于Unix和Windows系统,不需要创建窗口。 应用程序调用WSAAsynselcet()函数后,自动将套接字设置为非阻塞模式,而应用程序调用Select()函数后,并不能改变该套接字的工作方式。 WSAAsyncSelect模型的实现 WSAAsyncSelect()函数 是模型的核心 创建窗口和窗口例程 模型应用在基于消息的Windows应用程序中 WSAAsyncSelect(?)是Winsock提供的一个适合于Windows编程使用的函数。 若在一个套接口上发生特定的网络事件,它给Windows网络应用程序(窗口或对话框)发送一个消息(事件通知)。 函数成功调用后,当指定的网络事件发生时,会自动执行该窗口对应的窗口回调例程。并将网络事件通知,以及Windows消息的相关信息,传递给该例程的入口参数,用户可以在该例程中添加自己的代码,针对不同的网络事件进行响应,从而实现有序的套接字输入和输出。 1.函数格式 int WSAAsyncSelect( SOCKET s, HWND hWnd, unsigned int wMsg, long lEvent ); When one of the nominated network events occurs on the specified socket s, the applications window hWnd receives message wMsg. The wParam parameter identifies the socket on which a network event has occurred. The low word of lParam specifies the network event that has occurred. The high word of lParam contains any error code. The error code be any error as defined in Winsock2.h. 3.函数返回信息 若应用程序感兴趣的网络事件声明成功,则返回0; 如果声明失败,则返回SOCKET_ERROR错误信息。可进一步通过调用WSAGetLastError(?)函数返回特定错误代码。 4.函数使用说明 (1) 若应用程序对一个套接口s调用了WSAAsyncSelect(?)函数,那么套接口s的模式会自动从阻塞模式变成非阻塞模式。 (2) 如果应用程序同时对多个网络事件感兴趣,那么只需对各种类型的网络事件执行按位或(OR)的运算即可。 (3) 特别要注意的是,进行一次WSAAsyncSelect(?)调用,将使为同一个套接口启动的所有以前的WSAAsyncSelect(?)调用作废。 FD_READ和FD_WRITE调用WSAAsyncSelect(?): rc=WSAAsyncSelect(s, hWnd, wMsg, FD_READ|FD_WRITE); 而不能使用如下的调用方式,因为第二次调用将会使第一次调用的作用失效: rc=WSAAsyncSelect(s, hWnd, wMsg1, FD_READ); rc=WSAAsyncSelect(s, hWnd, wMsg2, FD_WRITE); (4) 如果要取消所有的通知,也就是指出Windows

文档评论(0)

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

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

1亿VIP精品文档

相关文档