实验五IO模型实验.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验五 I/O模型网络程序实验 1 实验类型 验证型实验 .2实验目的 掌握Winsock I/O模型工作原理; 熟悉I/O模型中使用的Winsock接口函数; 掌握使用I/O模型进行网络程序设计的编程步骤; 3背景知识 Windows套接字工作模式 Windows套接字工作模式分为两类:阻塞(Blocking)模式和非阻塞(NonBlocking)模式。 在阻塞模式下,在I/O操作完成前,执行操作的Winsock函数会一直等待下去,不会立即返回(将控制权交还给程序),这就意味着任一个线程在某一时刻只能执行一个输入/输出(I/O)操作,而且应用程序很难同时通过多个建好连接的套接字进行通信。正如我们在以前的实验中看到的,服务端或客户端在运行到recv()函数时会进入阻塞状态,直到对方响应时(即运行了send()函数后)才能继续执行下去。在默认的情况下,套接字工作在阻塞模式。 在非阻塞模式下,Winsock函数会立即返回,并交出程序的控制权,这就为我们实际需要中同时管理多个连接、并维持与每个连接的及时通信提供了基础。在实际问题中,Winsock编程经常需要使用多线程的方法使程序对用户的动作进行及时响应,但会增加一些开销,并且扩展性比较差。尽管非阻塞模式套接字在使用上不如阻塞套接字简单,但它在功能上还是非常强大的,同时简化了我们针对实际问题的编程过程。 Winsock I/O模型 选择模型(Select Model) 异步选择模型(WSAAsyncSelect Model) 事件选择模型(WSAEventSelect Model) 重叠模型(Overlapped Model) 完成端口模型(Completion Port Model) 选择模型 Select模型是WinSock中最常见的I/O模型,通过调用Select函数可以确定一个或多个套接字的状态,判断套接字上是否存在数据,或者能否向一个套接字写入数据。该模型关键在于select函数,其函数原型如下: int select( int nfds,//忽略 fd_set *readfds,//检查可读性集合 fd_set *writefds,//检查可写性集合 fd_set *exceptfds,//检查错误集合 const struct timeval *timeout//等待时间); 函数返回时指定的集合中保留了发生网络事件的套接字,应用程序可以对此进行判断从而确定在哪些套接字上有网络事件发生,进而进行数据或者错误处理。 使用该模型的编程一般步骤如下: 建立fd_set集合s,用来存放欲使用的套接字。 将套接字添加到集合s中。 确定要检查的套接字集合Xi(1= i =3)。 使用FD_ZERO宏,初始化Xi 。 使用FD_SET宏,根据需要将套接字句柄添加到Xi中 调用select函数 根据select函数的返回值进行处理,当成功返回时,判断s中套接字是否在Xi 中,并进行相应处理(处理时可能要添加新的套接字到s中) 回到4 异步选择模型 WSAAsyncSelect模型是WinSock中另一个常用的异步I/O模型,该模型可在套接字上接收以Windows消息为基础的网络事件通知,通过调用WSAAsyncSelect函数自动将套接字设置为非阻塞模式,并向WinSock DLL注册一个或多个感兴趣的网络事件,同时提供接收通知时使用的窗口句柄,当注册的网络事件发生时,对应的窗口将收到一个基于消息的通知。 WSAAsyncSelect函数原型如下: int WSAAsyncSelect(SOCKET s, HWND hWnd, unsigned int uMsg, long lEvent); 其中s就是我们想要的那个套接字;hWnd是接收消息通知那个窗口句柄;wMsg参数指定在发生网络事件时要接受的消息,通常设成比WM_USER大的一个值,以避免消息冲突;lEvent指定了一个位掩码,对应一系列网络事件的组合,见表3-1所示。 事件含义对照表 lEvent 含义 FD_READ 程序想要接收有关是否可读的通知,以便读入数据 FD_WRITE 程序想要接收有关是否可写的通知,以便写入数据 FD_OOB 程序想要接收是否有OOB数据到达的通知 FD_ACCEPT 程序想要接收与进入连接有关的通知 FD_CONNECT 程序想要接收与一次连接或多点接入有关的通知 FD_CLOSE 程序想要接收与套接字关闭有关的通知 FD_QOS 程序想要接收套接字服务质量(QoS)发生变化的通知 FD_GROUP_QOS 暂时没用,属于保留事件 FD_ROUTING_IN

文档评论(0)

zefm2pj7 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档