网络软件设计8——异步响应.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网络软件设计8——异步响应

* * * * * * * * * * * * 段景山 网络软件设计 Win32 Socket 异步消息机制 WSAAsyncSelect() 制作 主讲 段景山 * 消息驱动与Socket服务机制的矛盾 阻塞? 造成主线程无法响应窗口消息 非阻塞? 设置套接字为非阻塞状态(见课件9) 主线程忙等无法响应窗口消息 select? 主线程受select机制影响仍无法响应窗口消息 多线程并发服务? 子线程可以独立工作,不致影响主线程响应消息 但主线程一旦需要循环等待接受客户连接,仍出现以上问题 基于windows消息的循环 基于select的循环 * 矛盾的根源 使用套接字时的循环机制 循环等待客户连接 循环等待客户数据 在窗口程序中循环或阻塞都会影响主线程对消息的响应 while(1){ ns = accept(sock,…); … } while(recv 0){ len = recv(sock,…); … } 事件 * 解决矛盾 方案一 为所有需要循环等待的程序段生成线程 为需要循环等待客户连接的部分生成子线程 为需要循环等待数据、完成通信的部分生成子线程 窗口函数 click start while(1){ accept(); } while(1){ recv(); } 客户 connect 客户 connect while(1){ recv(); } * 解决矛盾 方案二 不在程序中循环等待 如何促使程序不断接受客户连接,接收数据? 窗口函数 click start select(); while(1){ } 窗口程序是基于消息的,如果将客户连接、数据到达等也映射为消息则通信程序也可以基于消息驱动,不必自己去循环等待——异步响应 WSAAsyncSelect( ) * WSAAsyncSelect( ) 异步选择机制 使用WSAAsyncSelect()注册网络事件 当套接字上出现出现相应的事件时,会用消息通知窗口函数处理 接受连接 接收数据 连接被关闭 …… WSAAsyncSelect()参数设计 套接字 窗口句柄 消息,事件 * WSAAsyncSelect( ) 函数说明 int WSAAsyncSelect( SOCKET s, HWND hWnd, unsigned int wMsg, long lEvent) wMsg:套接字消息,如UM_SOCK,该消息通过以下方式定义 #define UM_SOCK WM_USER+1 lEvent:套接字事件,事件类型有 FD_READ FD_WRITE FD_ACCEPT FD_CONNECT FD_CLOSE FD_OOB 有数据接收 可以发送 有客户建立连接 与服务器建立连接,或连接失败connet的结果 连接被关闭 带外(紧急)数据到达 * WSAAsyncSelect( ) 函数功能及使用方法说明 该函数用于将指定的套接字上发生的指定消息及事件向指定窗口注册 当套接字上发生指定事件时,系统会通过消息机制通知指定的窗口函数处理 int WSAAsyncSelect( SOCKET s, HWND hWnd, unsigned int wMsg, long lEvent) 指定套接字 指定消息 指定事件 指定窗口 WinMain WndProc WndProc WndProc DispatchMessage() * WSAAsyncSelect( ) 函数功能及使用方法说明 该函数用于将指定的套接字上的指定消息及事件向指定窗口注册 当套接字上发生指定事件时,系统会通过消息机制通知指定的窗口函数处理 换言之,如果不事先注册,套接字上的事件不会通知窗口函数 注册多个事件时,使用以下方式 WSAASyncSelect(s,hWnd,UM_SOCK, FD_READ|FD_ACCEPT|FD_CLOSE); 当窗口收到套接字消息后,message为UM_SOCK,事

文档评论(0)

sandaolingcrh + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档