- 1、本文档共73页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章Winsock基础
其中: 参数s标识请求事件通知的套接字的描述符; 参数hWnd标识网络事件发生时,接收消息的窗口的句柄; 参数wMsg为网络事件发生时,窗口接收到的消息; 参数lEvent为指定应用程序感兴趣的网络事件组合的位屏蔽,可由表3.1中所列的值组成。 表3.1 IEvent可用事件 3.3.3 WSAEventSelect模型 WSAEventSelect模型是WinSock提供的另一个有用的异步I/O模型,与WSAAsyncSelect模型类似的是,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知,并且它支持的网络事件与WSAAsyncSelect模型一样。它与WSAAsyncSelect模型的主要区别在于网络事件会被发送到一个事件对象句柄,而不是发送到一个窗口。 首先,调用函数WSACreateEvent()创建事件对象来接收网络事件,其函数原型为 WSAEVENT WSACreateEvent(void); 其返回值是一个事件对象句柄,该事件有两种工作状态“已传信(signaled)”和“未传信(nonsignaled)”及两种工作模式“人工重设(manual reset)”和“自动重设(auto reset)”。默认状态下事件处于“未传信”的工作状态和“人工重设”模式。 其次,要调用WSAEventSelect()函数将创建的事件对象与某个套接字关联在一起,同时注册感兴趣的网络事件类型,使事件对象的工作状态从“未传信”转变成“已传信”。WSAEventSelect()函数原型为 int WSAEventSelect( SOCKET s, WSAEVENT hEventObject, long lNetworkEvents); 其中: 参数s为一个标识套接字的描述字; 参数hEventObject用于指定与所提供的FD_XXX网络事件集合相关的一个事件对象句柄; 参数lNetworkEvents是一个屏蔽位,用于指定感兴趣的FD_XXX网络事件组合。 由于事件对象创建后默认处于人工重设模式,因此在完成一个I/O请求的处理之后,应用程序需要调用WSAResetEvent函数将事件对象的工作状态从“已传信”更改为“未传信”。WSAResetEvent()函数原型为 BOOL WSAResetEvent( WSAEVENT hEvent); 其中:参数hEvent是一个事件句柄,成功则返回TRUE,失败则返FALSE。 一个套接字与一个事件对象句柄关联在一起后,应用程序就可以通过WSAWaitForMultipleEvents()函数等待网络事件来触发事件句柄的工作状态,进行I/O处理,其原型为 DWORD WSAWaitForMultipleEvents( DWORD cEvents, const WSAEVENT FAR *lphEvents, BOOL fWaitAll, DWORD dwTimeout, BOOL fAlertable ); 其中: 参数lphEvents为指向一个事件对象句柄数组的指针。 参数cEvents指出lphEvents所指向的数组中事件对象句柄的数目,事件对象句柄数组的最大值为WSA_MAXIMUM_WAIT_EVENTS。 参数fWaitAll指定等待类型,若为TRUE,则当lphEvents数组中的所有事件对象同时有信号时,函数返回;若为FALSE,则当任意一个事件对象有信号时函数就返回。后一种情况返回值指出是哪一个事件对象造成函数返回。通常把该参数设置为FALSE,一次只为一个套接字事件提供服务。 参数dwTimeout指定超时等待时间(以毫秒计),若超时间隔到,不论fWaitAll参数所指定的条件是否满足,函数即返回。如果dwTimeout为零,则函数测试指定事件对象的状态,并立即返回。如果dwTimeout为WSA_INFINITE,则函数的超时间隔永远不会到。 参数fAlertable指定当系统将一个I/O完成例程放入队列以供执行时,函数是否返回,若为TRUE,则函数返回并执行完成例程;若为FALSE,则函数不返回且不执行完成例程。在Win 16中应忽略该参数。 返回值:如果函数调用成功,则指出造成函数返回的事件对象;如果函数调用失败,则返回值为WSA_WAIT_FAILED。 这样,应用程序就可引用事件数组中已传信的事件,并检索与那个事件对应的套接字,判断到底是在哪个套接字上,发生了什么网络事件类型。对事件数组中的事件进行引用时,应该用WSAWaitForMultipleEvents的返回值,减去预声明值WSA_WAIT_EVENT_0,
您可能关注的文档
- 胖胖也有春天.ppt
- 快与慢习题(演示).ppt
- Less_09建表.ppt
- 03EX1000资源与客户端管理.ppt
- 全二阶段测试4..doc
- 环监期末复习.doc
- 高考数学专题十二:直线圆锥曲线平面向量.doc
- 高考汇编—三角函数.doc
- 2012思想汇报及转正申请6+1.doc
- 专题三竖直面上运动问题.ppt
- 2023-2024学年广东省深圳市龙岗区高二(上)期末物理试卷(含答案).pdf
- 2023-2024学年贵州省贵阳市普通中学高一(下)期末物理试卷(含答案).pdf
- 21.《大自然的声音》课件(共45张PPT).pptx
- 2023年江西省吉安市吉安县小升初数学试卷(含答案).pdf
- 2024-2025学年广东省清远市九校联考高一(上)期中物理试卷(含答案).pdf
- 广东省珠海市六校联考2024-2025学年高二上学期11月期中考试语文试题.pdf
- 2024-2025学年语文六年级上册第4单元-单元素养测试(含答案).pdf
- 2024-2025学年重庆八中高三(上)月考物理试卷(10月份)(含答案).pdf
- 安徽省安庆市潜山市北片学校联考2024-2025学年七年级上学期期中生物学试题(含答案).pdf
- 贵州省部分校2024-2025学年九年级上学期期中联考数学试题(含答案).pdf
文档评论(0)