12.16

WSAEventSelect模型是Winsock提供的异步事件通知I/O模型。它与WSAAsyncSelect模型类似,都允许应用程序在一个或者多个套接字上接收基于事件的网络通知。但WSAEventSelect模型不需要主动建立起一个窗口类,不需要依靠Windows的消息驱动机制,而是经由事件对象的句柄进行通知。
该模型的特殊就在于它使用事件句柄来完成SOCKET事件的通知,首先在每个socket句柄上调用WSACreateEvent来创建一个WSAEvent对象句柄nt对象句柄(早期的WSAEvent与传统的Event句柄有一定的区别,但是从WinSock2.0 以后二者是同一个东西)。接着调用WSAEventSelect将SOCKET句柄和WSAEvent对象绑定,最终通过WSAWaitForMultiEvents来等待WSAEvent变为有信号,然后再来处理对应的socket。
简言之也可以说分为:创建事件对象->事件受信->查看网络事件
其中查看网络事件,使用WSAEnumNetworkEvent()函数来查看发生了什么网络事件:
Int WSAAPI
WSAEnumNetworkEvents(
In SOCKET s,
In WSAEVENT hEventObject,
Out LPWSANETWORKEVENTS lpNetworkEvents
);
在这里插入图片描述
本次实验中,WSAEventSelect模型本身的思路比较清晰,通过上次对于WSAAsyncSelect模型编写后,在客户端,接收信息方面的代码编写基本能顺利的写下。
在内容的编写过程中,对于如何快速计算水仙花数的判断其实可以优化,从1-1000进行水仙花数的判断,其实对于100-999三位数判断即可,在编写过程中,也遇到了算法不加而出现水仙花数中出现1000情况,这个情况的发生其实就是在过程中没有考虑清楚,算法有不恰当的地方,其实多一个对于超过三位数的判断即可,或者在一开始接收时对于超过三位数就不进行接收,或是在循环过程中进行删减,或者是在最后不向客户端反馈超过三位数的数字。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值