




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络软件设计,Win32Socket异步消息机制WSAAsyncSelect(),制作主讲,段景山,2,消息驱动与Socket服务机制的矛盾,阻塞?造成主线程无法响应窗口消息非阻塞?设置套接字为非阻塞状态(见课件9)主线程忙等无法响应窗口消息select?主线程受select机制影响仍无法响应窗口消息多线程并发服务?子线程可以独立工作,不致影响主线程响应消息但主线程一旦需要循环等待接受客户连接,仍出现以上问题,基于windows消息的循环,基于select的循环,3,矛盾的根源,使用套接字时的循环机制循环等待客户连接循环等待客户数据在窗口程序中循环或阻塞都会影响主线程对消息的响应,while(1)ns=accept(sock,);,while(recv0)len=recv(sock,);,事件,4,解决矛盾,方案一为所有需要循环等待的程序段生成线程为需要循环等待客户连接的部分生成子线程为需要循环等待数据、完成通信的部分生成子线程,窗口函数,clickstart,客户connect,客户connect,5,解决矛盾,方案二不在程序中循环等待如何促使程序不断接受客户连接,接收数据?,窗口函数,clickstart,select();,while(1),窗口程序是基于消息的,如果将客户连接、数据到达等也映射为消息则通信程序也可以基于消息驱动,不必自己去循环等待异步响应,WSAAsyncSelect(),6,WSAAsyncSelect(),异步选择机制使用WSAAsyncSelect()注册网络事件当套接字上出现出现相应的事件时,会用消息通知窗口函数处理接受连接接收数据连接被关闭WSAAsyncSelect()参数设计套接字窗口句柄消息,事件,7,WSAAsyncSelect(),函数说明,intWSAAsyncSelect(SOCKETs,HWNDhWnd,unsignedintwMsg,longlEvent),wMsg:套接字消息,如UM_SOCK,该消息通过以下方式定义defineUM_SOCKWM_USER1,lEvent:套接字事件,事件类型有,FD_READ,FD_WRITE,FD_ACCEPT,FD_CONNECT,FD_CLOSE,FD_OOB,有数据接收,可以发送,有客户建立连接,与服务器建立连接,或连接失败connet的结果,连接被关闭,带外(紧急)数据到达,8,WSAAsyncSelect(),函数功能及使用方法说明该函数用于将指定的套接字上发生的指定消息及事件向指定窗口注册当套接字上发生指定事件时,系统会通过消息机制通知指定的窗口函数处理,intWSAAsyncSelect(SOCKETs,HWNDhWnd,unsignedintwMsg,longlEvent),指定套接字,指定消息,指定事件,指定窗口,WinMain,WndProc,WndProc,WndProc,DispatchMessage(),9,WSAAsyncSelect(),函数功能及使用方法说明该函数用于将指定的套接字上的指定消息及事件向指定窗口注册当套接字上发生指定事件时,系统会通过消息机制通知指定的窗口函数处理换言之,如果不事先注册,套接字上的事件不会通知窗口函数注册多个事件时,使用以下方式WSAASyncSelect(s,hWnd,UM_SOCK,FD_READ|FD_ACCEPT|FD_CLOSE);当窗口收到套接字消息后,message为UM_SOCK,事件用lParam通知,发生事件的套接字标识符由wParam通知使用了WSAAsyncSelect的套接字自动变成非阻塞状态select不具有这个功能,可以自己定义,系统定义,10,WSAAsyncSelect(),函数功能及使用方法说明与select不同的是,注册只需进行一次,系统会一直保持对事件的敏感,直到重新注册第二次注册时,会取消上次注册的消息例:下面两段程序并不等价,WSAAsyncSelect(s,hWnd,UM_SOCK,FD_READ|FD_WRITE);,希望系统对s上的FD_READ和FD_WRITE事件进行通知,WSAAsyncSelect(s,hWnd,UM_SOCK,FD_READ);,WSAAsyncSelect(s,hWnd,UM_SOCK,FD_WRITE);,系统仅对s上的FD_WRITE事件进行通知,11,异步选择机制,对消息/事件的注册用于实现不同功能的套接字,可能注册不同的事件对事件的响应事件使能(重新允许)更多的错误处理,12,异步选择机制,对消息/事件的注册服务器主套接字上注册FD_ACCEPT事件从套接字上注册FD_READ|FD_CLOSE等事件客户机套接字注册FD_CONNECT事件对事件的响应判断为UM_SOCK消息后,进一步获得套接字标识符和事件根据事件,在套接字上调用相应函数FD_ACCEPTaccept(s)FD_READrecv(s),read(s)FD_CONNECT连接已建立,客户可以发出数据了FD_CLOSEclosesocket(s)FD_WRITEsend(s),write(s)事件使能(重新允许)Windows对用户产生事件后,如果用户没有对事件处理,Windows将不对用户继续产生事件。必须针对每个事件进行处理,以使系统继续产生新的事件,13,例,服务器程序(与前一部分的程序相比)在StartServer()中使用WSAAsyncSelect而不是用循环的方式等待accept在窗口函数中添加UM_SOCK类消息,并进一步添加对各事件的处理,bind(mainsock,);listen(mainsock,);WSAAsyncSelect(mainsock,hWnd,UMSOCK,FD_ACCEPT),14,例,套接字消息处理,WndProc()switch(message)caseUM_SOCK:id=LOWORD(lParam);sock=wParam;switch(id)caseFD_ACCEPT:nsaccept(sock,);WSAAsyncSelect(ns,FD_READ|FD_CLOSE);caseFD_READ:recv(sock,buf);,15,例,客户机程序在start中,调用connect,但要注意,connect返回时,并不意味着连接已建立,需要等待FD_CONNECT事件在窗口函数中增加套接字事件处理,socksocket();WSAAsyncSelect(sock,,FD_CONNECT);填写server的IP地址和端口号;connect(sock,server,);,16,例,套接字消息处理,WndProc()switch(message)caseUM_SOCK:event=LOWORD(lParam);sock=wParam;switch(event)caseFD_CONNECT:if(HIWORD(lParam)=0)WSAAsyncSelect(sock,UM_SOCK,FD_READ|FD_CLOSE);elseclosesocket(sock);break;caseFD_READ:recv(sock,buf);,17,异步选择机制,事件使能(重新允许)实验:在出现FD_READ事件后,没有调用recv(),观察系统是否再次产生FD_READ事件。对比实验:出现FD_READ事件后,调用recv()接收,不管是否接收完,系统都会根据需要继续产生FD_READ事件,18,异步选择机制,WinSock下具有重新允许功能的函数,及与相应事件的对应关系FD_READrecv()或recvfrom()FD_WRITEsend()sendto()FD_ACCEPTaccept()FD_CONNECTNONEFD_CLOSENONEFD_OOBrecv(),19,异步选择机制,更多的错误处理原因基于消息的程序机制,具有多个入口(菜单、按钮、选项)使用者可能任意选择入口,对程序流程造成意想不到的破坏,如还未建立连接,就点击发送键方法一迫使用户按照程序设计者规定的流程。在每个阶段,将不应该进入的菜单、按钮、选项失效(变灰)方法二进行更多的错误状态判断,使每个入口的执行条件更为严格。,20,异步选择与多路复用,Windows异步选择机制中,在通知用户的消息中,也同时通知了产生事件的套接字描述符,所以有以下结论:异步选择机制支持多路服用。即可以对多个套接字同时进行事件注册,并同时处理与select相比,程序员自行管理套接字队列的功能不是必需的。winsock下的多路复用由系统支持同时也受到系统的限制对于大型、复杂的服务器程序,程序员仍应根据需要考虑对套接字队列的管理。甚至,慎重考虑是否需要建立在windows的窗口机制下。,21,同步选择与异步选择的比较,基于select的同步选择不断查询程序框架是不断循环同步性:查询结果是套接字当时状态需要用户自行管理多个套接字以备查询不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 解除租赁车辆合同范本
- 正规房屋租赁合同书样本2篇
- 质量管理概论题目及答案
- 旅游服务合同书
- 金融科技支付服务在新消费模式中的应用
- 初三二模数学试卷及答案
- 2025年山东省政府采购评审专家考试试题及答案
- CN120190493A 一种印刷包装用激光切割装置 (山东艾泰龙印刷有限公司)
- 2025年四年级美术试卷及答案
- CN120111445B 一种基于无监督哈希学习的无人集群协同感知方法及系统 (南京亚兴为信息技术有限公司)
- (2025秋新版)教科版三年级上册科学全册教案
- 2025年新西师大版数学三年级上册全册课件
- 食品安全总监、食品安全员考核考试测试题及答案
- 2025年彩票市场监察笔试备考手册
- 培训学校租房合同协议书
- 第8课 西溪湿地教学设计-2025-2026学年小学地方、校本课程浙教版(2021)人·自然·社会
- 江淮十校2026届高三第一次联考物理试卷(含答案解析)
- 网络货运行业知识培训课件
- 《从“浪浪山”启程做更好的“小妖怪”!》开学第一课班会教案
- 1.8《天气的影响》教学设计-教科版三上科学(新教材)
- 防地震教学课件
评论
0/150
提交评论