- 1、本文档共104页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络编程技术_第8章-2.ppt
网络编程技术;;WSAEventSelect模型;WSAEventSelect模型;使用步骤;;3、等待网络事件来触发事件句柄的工作状态:
DWORD WSAWaitForMultipleEvents(
DWORD cEvents,
const WSAEVENT FAR * lphEvents,
BOOL fWaitAll,
DWORD dwTimeout,
BOOL fAlertable )
cEvents:事件句柄的数目,其最大值为WSA_MAXIMUM_WAIT_EVENTS = 64
lpEvent:事件句柄数组
fWaitAll:指定等待类型:
TRUE:当lphEvent数组所有事件对象同时有信号时返回;
FALSE:任一事件有信号就返回。
dwTimeout:等待时间(毫秒),WSA_INFINTE为无限大,当该参数为0时,用于测试事件对象状态。
fAlertable:指定此等待函数是否在提交重叠I/O请求后执行完全例程。若为TRUE,则在系统执行I/O完全例程时,此函数直接返回WSA_WAIT_IO_COMPLETION而不等待事件发生
;失败返回WSA_WAIT_FAILED;
超时返回WSA_WAIT_TIMEOUT;
成功返回时返回值范围为:WSA_WAIT_EVENT_0 to (WSA_WAIT_EVENT_0 + cEvents - 1),应用程序可引用事件数组中有信号的事件,并检索与之对应的套接字,判断到底是在哪个套接字上,发生了什么网络事件类型。
对事件数组中的某个事件进行引用时(此时fWaitAll= FALSE),应该用WSAWaitForMultipleEvents的返回值,减去预声明值WSA_WAIT_EVENT_0,得到具体的事件索引。
例如:
Index= WSAWaitForMultipleEvents(...);
MyEvent = EventArray[Index- WSA_WAIT_EVENT_0];
;4、判断网络事件类型:
int WSAEnumNetworkEvents(
SOCKET s,
WSAEVENT hEventObject,
LPWSANETWORKEVENTS lpNetworkEvents
)
s为套接字
hEventObject:与s对应的事件对象句柄,调用后该事件对象被重置,即事件和错误清0。
lpNetworkEvents:调用后,这里记录了套接字s 对应事件对象中保存的网络事件和错误代码,
;LPWSANETWORKEVENTS其结构定义如下:
typedef struct _WSANETWORKEVENTS
{
long lNetworkEvents;
int iErrorCode[FD_MAX_EVENTS];
} WSANETWORKEVENTS, FAR * LPWSANETWORKEVENTS;
;判断是何种事件:
//假设NetworkEvents是取回来的事件和错误
if (NetworkEvents.lNetworkEvents FD_READ)
{ //进行数据读取 }
判断是何种错误:
针对每个网络事件类型,都存在着一个特殊的事件索引,名字与事件类型的名字类似,只是要在事件名字后添加一个“_BIT”后缀字串即可。如对FD_READ事件类型来说,iErrorCodes数组的索引标识符便是FD_READ_BIT。
比如:检查FD_READ事件是否发生错误,可以用
if(NetworkEvents.iErrorCode[FD_READ_BIT ]!= 0)
{ //错误处理 };;; 使用WSAEventSelect模型编程的基本步骤:
创建一个事件句柄表和一个对应的套接字句柄表。
每创建一个套接字,就创建一个事件对象,把它们的句柄分别放入上面的两个表中,并调用WSAEventSelect将二者关联起来。
调用WSAWaitForMultipleEvents在所有事件对象上等待(bWaitAll = FALSE),函数返回后,从第一个有信号的事件对象开始检查事件对象表中的事件对象是否有信号(再次调用WSAWaitForMultipleEvents )。
调用WSAEnumNetworkEvents(),获取套接字上相应的网络事件并处理,然后继续在事件对象上等待。
;WSAEventSelect优缺点;WSAEventSelect模型实例;#include winsock2.h
#include stdio.h
#define PORT 5150
#define M
您可能关注的文档
- 微机原理与应用第八章.ppt
- 第4单元-化学实验-新课标-化学.ppt
- 青春期性教育(男).ppt
- 徐工院信息管理组织部11级4月团简讯.doc
- 普通化学课件2.2.ppt
- 23.2相似图形.ppt
- 第2单元 第1讲古希腊和古罗马的政治制度.ppt
- 2010生物高考复习《生物科技》专题系列课件14:《生物工程》.ppt
- 2011-2012第一学年C语言程序设计试卷.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)