Windows网络与通信程序设计实验四:基于WSAEventSelect模型的通信仿真

2023/11/30 9:34:44

文章目录

  • Windows网络与通信程序设计实验四:基于WSAEventSelect模型的通信仿真
    • 1. WSAEventSelect模型的相关函数:
      • 1.1 WSACreateEvent函数
      • 1.2 WSAEventSelect函数
      • 1.3 WSAWaitForMultipleEvents函数
      • 1.4 WSAEnumNetworkEvents函数
    • 2. WSAEventSelect模型的相关流程图

Windows网络与通信程序设计实验四:基于WSAEventSelect模型的通信仿真

引子:
WSAEventSelect模型
该模型与WSAAsyncSelect模型类似,允许应用程序在一个或者多个套接字上接收基于事件的网络通知。
不过它并不是依靠Windows的消息驱动机制
而是经由事件对象句柄通知

  • 当然它与WSAAsyncSelect模型类似,都是接收FD_XXX类型的网络事件。
  • 本模型中存在两个需要严格区分的概念:网络事件以及事件对象

1. WSAEventSelect模型的相关函数:

  • 流程概述
  • 使用这个模型的基本思路是为感兴趣的一组网络事件创建一个事件对象,再调用WSAEventSelect函数网络事件和事件对象关联起来
  • 网络事件发生时,Winsock使相应的事件对象受信在事件对象上等待的函数就会返回
  • 之后再调用WSAEnumNetworkEvents函数就可以获知到底发生了什么网络事件。
  • 最后便可以根据具体的网络事件类型来对其进行具体处理啦。

1.1 WSACreateEvent函数

  • 该函数的定义如下:
WSAEVENT WSACreateEvent (void);  //返回一个事件对象的句柄
  • 该函数无需传入任何参数,它仅仅是一个很单纯的创建事件对象的WSA函数。

1.2 WSAEventSelect函数

  • 该函数的定义如下:
int WSAEventSelect(
	SOCKER s,	// 套接字句柄
	WSAEVENT hEventObject,	//事件对象句柄
	long lNetworkEvents	//感兴趣的网络事件的组合
);
  • 该函数可以在网络事件发生的时候,将一组网络事件创建好的事件对象关联起来。
  • 网络事件事件对象关联之后,应用程序便可以在事件对象等待了。
  • Winsock提供了WSAWaitForMultipleEvents函数在一个或多个事件对象上等待,当所等待的事件受信或者超过指定的时间时,此函数返回。

1.3 WSAWaitForMultipleEvents函数

  • 该函数的定义如下:
DWORD WSAWaitForMultipleEvents(
	DWORD cEvents,	//指向下面lphEvents所指的数组中事件对象句柄的个数
	const WSAEVENT* lphEvents,	//指向一个事件对象句柄的数组的指针
	BOOL fWaitAll,	//指定是否等待所有事件对象都变成受信状态
	DWORD dwTimeout,	//指定要等待的时间,WSA_INFINITE为无穷大
	BOOL fAlertable	//在使用WSAEventSelect模型时可以忽略,应设为FALSE
);
  • WSAWaitForMultipleEvents函数最多支持WSA_MAXIMUM_WAIT_EVENTS个对象,且WSA_MAXIMUM_WAIT_EVENTS被定义为64。因此这个I/O模型在一个线程中同一时间能最多处理的套接字的个数最多只有64个套接字,如果需要这个模型去管理更多的套接字,就需要创建额外的工作线程了。
  • 该函数会等待网络事件的发生。
    • 如果过了指定的时间,函数就会返回WSA_WAIT_TIMEOUT;
    • 如果在指定的时间内有网络事件发生,函数的返回值就会指明是哪一个事件对象促使函数返回的;
    • 如果函数调用失败,那么函数就会返回WSA_WAIT_FAILED.
  • 也可以将dwTimeout的值设置为0,这样子,一旦有网络事件发生,函数就会立刻返回,此时可以通过返回值判断事件对象是否受信
  • 若将fWaitAll设置成FALSE后,如果有几个事件对象受信,WSAWaitForMultipleEvents的返回值也依然仅能指明一个,就是句柄数组中最前面的那一个
  • 如果指明的这个事件对象总有网络事件发生,那么后面的其它事件对象所关联的网络事件就得不到处理了。
  • 解决办法是,WSAWaitForMultipleEvents函数返回后对每个事件都再次调用WSAWaitForMultipleEvents函数以便确定其状态

一旦事件对象受信,那么找到与之对应的套接字,然后调用WSAEnumNetworkEvents函数就可以查看到底发生了什么类型的网络事件。

1.4 WSAEnumNetworkEvents函数

  • 该函数的定义如下:
int WSAEnumNetworkEvents(
	SOCKETR s,	//套接字句柄
	WSAEVENT hEventObjecj,	//和套接字对应的事件对象句柄
	LPWSANETWORKEVENTS lpNetworkEvents	//指向一个WSANETWORKEVENTS结构
);
  • 如果该函数中指定了hEventObject,则该事件对象的状态会被重置。
  • 该函数的最后一个参数用来取得在套接字上发生的网络事件和相关的出错代码
typedef struct_WSANETWORKEVENTS{
	long lNetworkEvents;	//指定已经发生的网络事件
	int iErrorCode[FD_MAX_EVENTS];	//与lNetworkEvents相关的出错代码
}WSANETWORKEVENTS, *LPWSANETWORKEVENTS;
  • 其中iErrorCode是一个数组,数组的每一个成员对应着一个网络事件的出错代码。
  • 可以用预定义标识FD_READ_BITFD_WRITE_BIT等来索引FD_READFD_WRITE等事件发生时的出错代码。

2. WSAEventSelect模型的相关流程图

在这里插入图片描述


http://www.jnnr.cn/a/122221.html

相关文章

【OpenDDS开发指南V3.20】第四章:条件和监听

DDS 规范定义了两种独立的机制,用于通知应用程序 DCPS 通信状态更改。大多数状态类型定义了一个结构,该结构包含与状态变化相关的信息,并且可以由应用程序使用条件或侦听器检测到。不同的状态类型在 4.2 中描述。 每个实体类型(域参与者、主题、发布者、订阅者、数据读取器…

华为认证协作高级工程师 HCIP-Collaboration V3.0(中文版) 预发布通知

尊敬的客户: 非常荣幸地通知您,华为协作高级工程师认证HCIP-Collaboration V3.0(中文版)预计将于2022年12月12日正式对外发布。为了帮助您做好学习、培训和考试计划,现进行预发布通知,请您关注。 HCIP-Co…

linux提权辅助工具Linux_Exploit_Suggester(三种工具)

今天讲linux提权辅助工具三种之一的Linux_Exploit_Suggester。Linux_Exploit_Suggester 工具介绍,Linux_Exploit_Suggester是一款根据Linux操作系统版本号自动查找相应提权脚本的工具,旨在帮助检测给定 Linux 内核/基于 Linux 的机器的安全缺陷。 项目地址:https://github.…

企业自研业务系统的登录如何添加动态口令,实施MFA双因子认证?

一、背景需求 不少企业因业务需要会自己研发业务系统,为保护业务数据安全,首先要确保能访问到业务数据的人员“身份”安全可信。 企业自研业务系统的账号密码基本是 IT 管理员单独管理维护,员工为了方便记忆,通常设置与其他商采系…

Product 1 Modulo N(数论,1600)

题目链接: Problem - 1514C - Codeforces 题目大意: 给定一个n,选择[1,2,3,.....n-1]的最长子序列,使得他们的乘积mul%n1 思路: 首先,我们考虑那些数不可以做乘积,如果x与n不互质&#xff…

Emgu CV4图像处理之打开Tensorflow训练模型17(C#)

本文测试环境: win10 64位 vistual studio 2019 Emgu CV 4.6.0 环境配置准备: 1 新增控制台项目,.net framework为4.7.2 2 把win-x64目录的native目录下的文件全部拷贝到项目的运行目录Debug目录下 3 项目选择x64 4 添加项目引用…

前端基础向~从项目出手封装工具函数

前言 在项目开始初期,往往都是有组里的“大佬”为我们搭建或者说改造一个项目使用的前端项目框架,通常都会包含一些常用的库和函数:比如 router 路由、store 数据共享、登录和异常页、动态路由和按钮权限处理等等。但是在项目进行过程中&…

【附源码】Python计算机毕业设计汽车租赁系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

控制文件丢失

测试环境oracle版本:19.3 场景1:控制文件有冗余 1、构造故障场景 (1)查看当前控制文件配置 SQL> show parameter control_files (2)构造冗余的控制文件 SQL> alter system set control_files/or…

Weblogic XMLDecoder 远程代码执行漏洞 CVE-2017-10271 漏洞复现

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓01 漏洞描述02 影响范围03 验证方式04 利用方式05 修复方案01 漏洞描述 WebLogic是Oracle推出的application server,是Web应用系统必不可少的组件,其具有支持EJB、JSP、JMS、XM…

电脑清理c盘怎么清理全教程,教你彻底清理所有垃圾

电脑c盘是电脑存储的主盘,所以当电脑的c盘存储被垃圾以及各种不必要文件占满之后,很容易导致电脑的卡顿。因此,电脑清理c盘垃圾对于电脑的流畅运行来说是很有必要的。那么,接下来小编就教你电脑清理c盘怎么清理,一招搞…

【LeetCode】221. 最大正方形

题目描述 在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。 示例 1: 输入:matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”]…

天玑9200领跑背后,高端芯片掀起蝴蝶效应

过去一年,天玑9000让联发科在高端旗舰机市场掀起了一场“旋风”。全球知名市场调研机构Counterpoint Research发布的报告显示,联发科在全球和中国智能手机芯片市场份额中连续八个季度保持第一的领先地位,且在高端手机市场的份额有显著增长。另…

食堂报餐订餐系统小程序_吃饭用餐人数统计缴费软件开发及介绍

一、员工使用报餐 1、员工通过小程序注册,第一次使用需要管理员审核是否本单位员工,审核通过才可以使用。 2、员工报餐,选择吃饭日期、餐类型(早中晚),选择吃饭份数,提交报餐。 3、报餐时&#…

HybridCLR 使用流程记录

clone https://github.com/focus-creative-games/hybridclr_trial.git Unity 2021.3.12f1c2 HybridCLR Installer 手动备份了一下il2cpp C:\Program Files\Unity\Hub\Editor\2021.3.12f1c2\Editor\Data\il2cpp 配置git系统变量用户变量,我使用的SourceTree内置的 C:…

sql 分页查询 order by和group by一起使用导致排序失效问题解决

背景:在查询数据库数据的时候,很多时候我们需要用到group by来进行分组,同时使用order by进行排序,但是当两个同时使用时稍不注意就会出现问题。我在进行公司项目开发时就出现了问题:通过分页查询对查询的数据进行分组…

浙大工商管理硕士(MBA)创客班适合哪些人群申请报考?

对2024年想要攻读MBA的考生来说,选择合适的项目是很关键的一步,专注浙大的达立易考教育针对浙大MBA项目的不同方向为大家做详细解读,帮助考生们做好项目方向选择。一、创客班项目基本简介创新创业是浙江大学管理学院的办学特色,浙…

Vue框架的学习(Vue操作指令学习三 V-bind )第三课

Vue框架的学习(Vue操作指令学习三 V-bind )第三课 语法的学习关键在于实操 案例一 V-bind基本操作 通过这个案例了解基本的操作 <div id"app"><img src"./img/1-1 (1).jpg" alt""><!--! 绑定图片利用V-bind指令 --><img v-…

8. 无线体内纳米网:基于蓝牙LE接口的数字ID系统

\qquad本文描述一个基于蓝牙LE接口的体内数字ID系统。它是通过将药剂注入人体&#xff0c;自组装在人体内预定位置的。图1给出了一个在体内形成的一般纳米网以及它与外界互联的情形。本文将尽可能简化所述系统&#xff0c;避开自组装过程和纳米器件设计的具体技术&#xff0c;聚…

物联网智能家居app开发,加速智能生活发展进程

随着移动互联网的发展&#xff0c;人们的消费观念开始改变&#xff0c;物联网智能家居的概念逐渐被人们所接受&#xff0c;物联网智能家居app也成为了人们智慧生活的首选。智能家居app通过网络技术完成与家庭设备的连接&#xff0c;实现物物之间的智能交互&#xff0c;为用户提…
最新文章