网络软件设计课程实验(电子科技大学)多路复用-阻塞与非阻塞实验指导书.docVIP

网络软件设计课程实验(电子科技大学)多路复用-阻塞与非阻塞实验指导书.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
电子科技大学通信学院 《网络软件设计实验指导书》 阻塞与非阻塞实验 编写者 段景山 2004年9月 阻塞与非阻塞实验 【实验目的】 体会非阻塞套接字的非阻塞效果; 体会阻塞套接字对多路复用流程的影响; 体会select中设置超时时间对系统性能的影响,(在selelct中设置超时时间实际上是进入一种既不是完全阻塞,又不是持续空转的“半阻塞”状态); 掌握阻塞套接字和非阻塞套接字不同情况下的程序设计思想。 【实验意义】 在select之前的重复服务器设计中,均默认采用阻塞套接字。基于select的服务器程序具有多路复用功能的同时,也引入了非阻塞套接字的设计。虽然套接字阻塞与否与select()函数没有任何关系,但通过完成基于select的服务器上相关实验,实验者更能通过对比的方法深刻体会阻塞与非阻塞设计各自鲜明的特点,和适用环境。 【实验环境】 两人一组实验,也可作为教师演示性实验。 【实验原理】 套接字接口函数是否阻塞,由套接字的状态决定,该状态可通过ioctlsocket( )来设置。 arg = 1; ioctlsocket( s, FIONBIO,arg ); 当套接字处于阻塞状态,执行操作时如果相应事件没有发生,则会阻塞当前进程,直到事件发生或出现错误。如果在非阻塞状态,接口函数始终立即返回,如果相应事件没有发生,将以错误返回值提醒应用程序,应用程序需要进一步获得错误代码,以确定是真的出现了错误,还是因为相应的事件没有发生(如对方的数据没有送达,错误类型将为WSAEWOULDBLOCK)。 阻塞是进程在需要等待某事件,暂时无法继续执行时,让出CPU使用权,提高系统效率的重要手段。在设计网络软件时,常遇到需要等待对方响应的现象――如等待客户机的连接,等待接收对方的数据,等待对方关闭连接等。对于多路复用服务器,如果在某个套接字的accept或recv等函数上阻塞时,将造成多路复用机制失效,因为select函数应建立在一种查询机制上,每次调用都会查询一遍所有用户要求的套接字的当前状态,在某个套接字上阻塞,就会影响查询过程的顺利进行。另一方面,如果设置套接字为非阻塞状态,则容易造成忙等。Select通过设置超时机制,一方面避免了在没有事件发生时的忙等查询,另一方面又使得查询机制能够不受阻碍地不断进行。 select函数引入了超时技术(设置最后一个参数――Timeout): struct timeval { long tv_sec; /* 秒计数 */ long tv_usec; /* 毫秒计数 */ }; struct timeval timeout; timeout.tv_sec = 1; timeout.tv_usec = 1;//设置超时值为1.001秒 …… select(...,…,…,…,timeout); 超时参数的功能是:当所查询的套接字队列中没有任何事件发生,应用进程将在阻塞了相应时间后重新取得CPU使用权,以完成常规动作和进行下一次查询(如我们将在后面的有状态服务器实验中使用select的超时机制制作程序的定时器,实现停等协议的超时重传等功能)。如果在阻塞期间发生了被查询的事件(即超时时间未到),应用进程将立刻获得CPU使用权,以便及时处理事件。 设置超时使得基于select的程序既避免常时间阻塞而无法完成常规动作,又避免持续查询(忙等)而浪费系统资源。应用进程定期获得CPU使用权,可进行常规动作,在没有时间发生时,应用进程让出了CPU使用权。 【实验方法】 调试程序的同时利用任务管理器观察在阻塞状态、非阻塞状态和“半阻塞”状态下,系统CPU利用率。 【实验步骤】 1、非阻塞套接字 打开非阻塞套接字服务器工程,调试服务器,观察在非阻塞套接字在没有客户机连接时,accept的返回值,错误代码和类型;观察服务器在客户机没有传送数据时,recv的返回值,错误代码和类型。 设计非阻塞方式下的循环流程,使服务器在没有客户连接时,不断查询客户的连接(即“忙等”的流程);在连接建立后,也设计类似的循环流程,让服务器不断查询客户的数据。 使用windows系统任务管理器,分别观察在没有客户连接情况下,以及在有一个客户连接,但暂时没有数据传递情况下的系统CPU使用率。 对比实验:将套接字设为非阻塞状态的语句注释,即套接字为默认的阻塞状态,重复以上步骤,对比阻塞和非阻塞流程对系统性能的影响。 虽然从程序执行功能的角度,阻塞套接字上服务器和非阻塞但“忙等”的服务器没有什么不同,但系统的性能则大不相同。 2、阻塞套接字 打开阻塞的server工程。该服务器是基于select设计的,但套接字都是阻塞状态。观察服务器程序,可以看到在处理recv事件时,程序在最后又

文档评论(0)

1243595614 + 关注
实名认证
文档贡献者

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档