网络软件设计——异步响应.pptx
《网络软件设计——异步响应.pptx》由会员分享,可在线阅读,更多相关《网络软件设计——异步响应.pptx(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1消息驱动与Socket服务机制的矛盾阻塞?造成主线程无法响应窗口消息非阻塞?设置套接字为非阻塞状态(见课件9)主线程忙等无法响应窗口消息select?主线程受select机制影响仍无法响应窗口消息多线程并发服务?子线程可以独立工作,不致影响主线程响应消息但主线程一旦需要循环等待接受客户连接,仍出现以上问题基于基于windowswindows消息的循环消息的循环基于基于selectselect的循环的循环第1页/共21页2矛盾的根源使用套接字时的循环机制循环等待客户连接循环等待客户数据在窗口程序中循环或阻塞都会影响主线程对消息的响应while(1)while(1)ns=accept(sock,
2、);ns=accept(sock,);while(recv 0)while(recv 0)len=recv(sock,);len=recv(sock,);事件事件第2页/共21页3解决矛盾方案一为所有需要循环等待的程序段生成线程为需要循环等待客户连接的部分生成子线程为需要循环等待数据、完成通信的部分生成子线程窗口函数窗口函数clickclickstartstartwhile(1)while(1)accept();accept();while(1)while(1)recv();recv();客户客户connectconnect客户客户connectconnectwhile(1)while(1)r
3、ecv();recv();第3页/共21页4解决矛盾方案二不在程序中循环等待如何促使程序不断接受客户连接,接收数据?窗口函数窗口函数clickclickstartstart select();select();while(1)while(1)窗口程序是基于消息的,如果将客户连接、数据到达等也映射为消息则通信程序窗口程序是基于消息的,如果将客户连接、数据到达等也映射为消息则通信程序也可以基于消息驱动,不必自己去循环等待也可以基于消息驱动,不必自己去循环等待异步响应异步响应WSAAsyncSelect()WSAAsyncSelect()第4页/共21页5WSAAsyncSelect()异步选择机制
4、使用WSAAsyncSelect()注册网络事件当套接字上出现出现相应的事件时,会用消息通知窗口函数处理接受连接接收数据连接被关闭WSAAsyncSelect()参数设计套接字窗口句柄消息,事件第5页/共21页6WSAAsyncSelect()函数说明int WSAAsyncSelect(SOCKET s,int WSAAsyncSelect(SOCKET s,HWND hWnd,HWND hWnd,unsigned int wMsg,unsigned int wMsg,long lEvent)long lEvent)wMsgwMsg:套接字消息,如:套接字消息,如UM_SOCKUM_SOCK
5、,该消息通过以下方式定义,该消息通过以下方式定义 define UM_SOCK WM_USERdefine UM_SOCK WM_USER1 1lEventlEvent:套接字事件,事件类型有:套接字事件,事件类型有FD_READFD_READFD_WRITEFD_WRITEFD_ACCEPTFD_ACCEPTFD_CONNECTFD_CONNECTFD_CLOSEFD_CLOSEFD_OOBFD_OOB有数据接收有数据接收可以发送可以发送有客户建立连接有客户建立连接与服务器建立连接,或连接失败与服务器建立连接,或连接失败connetconnet的结果的结果连接被关闭连接被关闭带外(紧急)数据
6、到达带外(紧急)数据到达第6页/共21页7WSAAsyncSelect()函数功能及使用方法说明该函数用于将指定的套接字上发生的指定消息及事件向指定窗口注册当套接字上发生指定事件时,系统会通过消息机制通知指定的窗口函数处理int WSAAsyncSelect(SOCKET s,int WSAAsyncSelect(SOCKET s,HWND hWnd,HWND hWnd,unsigned int wMsg,unsigned int wMsg,long lEvent)long lEvent)指定套接字指定套接字指定消息指定消息指定事件指定事件指定窗口指定窗口WinMainWinMainWndPr
7、ocWndProcWndProcWndProcWndProcWndProcDispatchMessage()DispatchMessage()第7页/共21页8WSAAsyncSelect()函数功能及使用方法说明该函数用于将指定的套接字上的指定消息及事件向指定窗口注册当套接字上发生指定事件时,系统会通过消息机制通知指定的窗口函数处理换言之,如果不事先注册,套接字上的事件不会通知窗口函数注册多个事件时,使用以下方式WSAASyncSelect(s,hWnd,UM_SOCK,FD_READ|FD_ACCEPT|FD_CLOSE);当窗口收到套接字消息后,message为UM_SOCK,事件用lP
8、aram通知,发生事件的套接字标识符由wParam通知使用了WSAAsyncSelect的套接字自动变成非阻塞状态select不具有这个功能可以自己定义可以自己定义系统定义系统定义第8页/共21页9WSAAsyncSelect()函数功能及使用方法说明与select不同的是,注册只需进行一次,系统会一直保持对事件的敏感,直到重新注册第二次注册时,会取消上次注册的消息例:下面两段程序并不等价WSAAsyncSelect(s,hWnd,UM_SOCK,FD_READ|FD_WRITE);WSAAsyncSelect(s,hWnd,UM_SOCK,FD_READ|FD_WRITE);希望系统对希望系
9、统对s s上的上的FD_READFD_READ和和FD_WRITEFD_WRITE事件进行通知事件进行通知WSAAsyncSelect(s,hWnd,UM_SOCK,FD_READ);WSAAsyncSelect(s,hWnd,UM_SOCK,FD_READ);WSAAsyncSelect(s,hWnd,UM_SOCK,FD_WRITE);WSAAsyncSelect(s,hWnd,UM_SOCK,FD_WRITE);系统仅对系统仅对s s上的上的FD_WRITEFD_WRITE事件进行通知事件进行通知第9页/共21页10异步选择机制对消息/事件的注册用于实现不同功能的套接字,可能注册不同的事
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络软件 设计 异步 响应
限制150内