- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
电子科技大学通信学院
《网络软件设计实验指导书》
多路复用服务器实验
编写者 段景山
2004年9月多路复用服务器实验
【实验目的】
掌握基于select的多路复用程序基本流程
掌握套接字队列的管理方法
掌握基本的套接字状态处理方法
【实验意义】
通过实验的引导过程,使实验者能够把握多路复用程序的结构特点和基本流程;掌握编写基于select机制多路复用程序编写的关键环节,特别是其中的两个关键技术:套接字队列和套接字状态处理。
【实验环境】
两人一组实验,也可作为教师演示性实验
【实验原理】
1、多路复用的基本原理
多路复用的程序结构将使程序能够同时服务于多条连接。为了达到这个目的,程序必须首先能同时管理多个套接字,一般以套接字队列的方式进行。程序需要利用select函数向系统同时查询多个套接字的状态,当select返回时,会用套接字状态队列的方式,提示程序员哪些套接字当前具有这种状态,如读套接字队列就表示当前队列上的套接字都有数据到达。稍后,程序员将根据套接字上具体的状态采取相应的处理,如逐个从读状态队列上的套接字中读取数据。
需要注意的是,同样的套接字状态可能在不同的情况下代表不同的含义,如监听套接字的read状态,表示为接收到一个新的连接,而普通套接字的read状态则表示该套接字上收到了一个新的数据。
2、服务器功能
本实验设计的服务器需要完成以下功能:收到客户机送来的数据后,打印,并返回一个确认信息,如“ack by server”,服务器不主动关闭套接字。服务器的功能看似非常简单,不过“麻雀虽小,五脏具全”,我们希望通过这个简单的服务器程序着重体现多路复用程序的框架、流程和执行效果。
3、多路复用服务器程序的主体框架
可以将多路复用程序结构划分为三个部分:初始化部分,包括建立监听套接字,初始化套接字队列;select部分,包括与select相关的形成套接字状态队列,设置超时值等;状态处理部分,逐个取出套接字队列中的套接字,根据其状态完成相应处理。
程序的基本框架如下:
主套接字的初始化
while(1){
设置套接字队列;
select( ……);
根据状态逐个处理套接字上的事件;
}
4、多路复用程序的关键技术之一--套接字管理队列
每次select之前程序都要根据套接字管理队列中的套接字,生成三个状态队列:read_fds、write_fds、except_fds――读状态、写状态和意外状态。提示系统当前需要了解哪些套接字的哪些状态。当select执行完毕后,相应套接字的状态就可以通过状态队列来获得了,即那些具有该状态的套接字就会留在队列中,而不具有相应状态的套接字则从队列中剔除。以后,程序可进一步根据状态完成相应的处理。
在基于select循环结束前需要将上述三个状态队列清空,并重新填充队列内容,开始下一次查询。
因此套接字管理队列是整个多路复用机制的关键,新连接的套接字需要放入到管理队列中,关闭的套接字需要从队列中取出,在每次调用select查询前,又需要根据管理队列生成状态队列。因此离开套接字管理队列就无法正确生成状态队列,也就无法同时了解多个套接字的状态,达到多路复用的目的。
5、多路复用程序的关键技术之二――套接字状态处理
当select结束后,多个套接字的状态将在状态队列中列出,程序员需要建立分支处理的程序框架实现对各种状态套接字的相应处理。
如读状态队列中的套接字表示该套接字上有数据到达,程序需要进一步调用recv()函数接收并处理数据。需要注意的是,如果主套接字上有了接收事件,则表明有新的连接接入,这时不是调用recv()接收数据,而应该调用accept()接收新连接,并将新连接的套接字放入套接字管理队列中。
这一部分的程序框架可用以下形式实现:
select( );
while( ){
逐个取出管理队列中的套接字;
if(套接字在读状态队列中){
读取数据;若为主套接字则接收新连接套接字。
}
if(套接字在写状态队列中){
处理写事件;
}
if(套接字在意外状态队列中){
处理意外状态;
}
}
6、调试
程序按照流程编写完毕后,就进入调试环节。
调试首先选取一些关键点,观察程序执行的流程和变量变化情况是否符合设计。本实验服务器程序的关键点如下:
主套接字能否正常工作:能否进入监听状态,能否接收新的连接
套接字管理队列能否正常工作:能否根据需要加入、删除和查找套接字
各套接字能否正确接收数据。
7、测试
程序调试成功后,可以实现对程序的测试,本实验要求实验者通过启动多个客户机与服务器连接,观察多路复用服务器的特点;以及利用对比测试手段,对比不具有多路复用能力的服务器,体会多路复用服务器有什么特点。
【实验方法】
实验设计分为高、中和低三个档次。高级阶段要求实验者根据实验要求完全独立完成多路
您可能关注的文档
- 通信原理精品教学(任通菊)第2章 基础知识2015.ppt
- 四肢骨折-教学课件.pdf
- 通信原理精品教学(任通菊)第3章 模拟传输.pptx
- 通信原理精品教学(任通菊)第4章 数字基带传输.pptx
- 通信原理精品教学(任通菊)第6章 模拟信号数字化与PCM.pptx
- 通信原理精品教学(任通菊)第8章 现代通信传输技术.pptx
- 通信原理精品教学(任通菊)第七章习题参考解答.pptx
- 通信原理精品教学(任通菊)第5章 基本的数字频带传输.pptx
- 通信原理精品教学(任通菊)作业解答-CH1.doc
- 通信原理精品教学(任通菊)作业解答-CH8.doc
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)