- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网络程序
大作业实验报告
题目:TCP/UDP双协议实现文件传输
学号:
姓名:
指导教师:
学院:
学校:
实验目的
通过学习实践深入理解TCP/UDP等传输协议,掌握socket网络编程,理解它们的工作机制,并在实验中实现TCP/UDP双协议传输,通过自己的实现方式保证的可靠传输,并使用预分配技术。
1.同时运行基于TCP与UDP的双协议
2.基于UDP协议的可靠传输
3.应用进程预分配技术
4.不上传,只下载
三、实验平台与语言
Linux Ubuntu9.04,C语言
四、实验设计思路
1.进程预分配设计
创建一个进程的时间比较长,如果在接收到客户端请求之后,创建一个子进程来处理,这会影响响应客户机的速度,为解决这个问题,采用一种称为“预创建(perfork)”的技术。服务器事先创建一定数目的子进程,对于TCP连接,每个子进程分别调用函数accept()从倾听套接字完成连接队列中接收已建立的客户机连接。对于UDP情况,由于要实现可靠传输,客户机要向服务器发送的数据报确认信息,这就会使其他进程认为这是一个新的连接,所以在这里我采用信号量机制,使得在一段时间内,只有一个进程在处理UDP连接,只有这个UDP连接处理完成后,其他进程才可以接收UDP连接并进行处理。也就是说,采用进程预分配技术后,可以实现TCP并发服务,UDP循环服务。使用预创建技术的服务器如图1。
图1 预创建子进程方式
服务器预先创建N个子进程,部分子进程正在处理客户机请求,部分子进程正在等待客户机请求。
这种服务器的优点是响应客户机的速度比较快,节省创建子进程的时间。但缺点是服务器预先估计所需创建的子进程数目。如果数目太少,那么多余的客户机讲等待,不能及时得到服务,而太多又会浪费系统资源。
为了解决上面的问题,服务器父进程可以动态的调整子进程数目,当空闲子进程数目小于下限时,父进程创建一些新的子进程;当空闲子进程大于上限时,父进程终止一些子进程。父进程需要两条消息来管理子进程:子进程接收一个连接和结束一个连接。当父进程接收的前一种消息时,将检查空闲子进程数目是否小于下限;当父进程接收都后一种消息时,将检查空闲子进程是否大于上限。为了获得这两种消息,父进程和每个子进程建立一个管道。当子进程接收到一条连接后,向这个管道中发送一字节消息,内容为1;当子进程处理完一个连接之后,向这个管道发送一个字节消息,内容为0.服务器的示意图如图2所示。
图2 动态更改子进程个数
为了管理子进程,定义一个结构child_queue,记录活动子进程数目,空闲子进程数目和子进程信息队列。子进程信息队列记录了每个子进程的信息:子进程的进程号,与父进程通信的管道和子进程的状态。子进程状态可能是等待客户机请求(CS_WAITING)或处理客户机请求(CS_PROCESSING)。
struct child_queue{ //结构:用于管理子进程
int chld_no; //活动子进程数目
int chld_avail; //空闲子进程数目
struct child_info{ //子进程信息
int pid; //子进程进程号
int pipefd; //与子进程通信的管道
int state; //子进程状态
}ci[CHILD_NUM_MAX]; //子进程信息数组
};
图3 进程预分配流程图
2.子进程处理连接及双协议实现
当一个子进程被创建后,它循环等待客户机连接请求,当客户机连接请求到达后,它判断是TCP连接,还是UDP连接。如果是TCP连接,子进程调用tcpfile()函数处理连接请求,在tcpfile()处理请求过程中,调用accept()函数从倾听套接字完成连接队列中接收已建立的连接,如果接收成功则通过管道通知父进程开始处理连接,父进程把它的状态置为CS_PROCESSING(处理客户机请求),然后判断空闲子进程数目是否小于下限,如果小于,则创建一定数目新的子进程。当连接处理完成后,子进程通过管道通知父进程连接处理完成,父进程把它的状态置为CS_WAITING,然后判断空闲子进程数目是否超过上限,如果超过,Kill一定数目的空闲子进程。而处理此次连接的子进程处理完成后继续等待新的连接。如果是UDP连接子进程先判断是否有其他进程正在调用udpfile()函数处理UDP连接,如果有,则说明这个连接有可能是客户端发送给服务器的数据报确认信息,那么子进程继续等
您可能关注的文档
最近下载
- 2022年星海音乐学院辅导员招聘考试笔试试题及答案解析.docx VIP
- (电梯自动控制技术习题.doc VIP
- 《城市绿地系统规划》教学课件—09工业绿地规划.pptx VIP
- 安徽省淠史杭灌区“十四五”续建配套与现代化改造工程二期环境影响报告书.pdf VIP
- Topcon电池技术分析.pptx VIP
- GBT11836-2009混凝土和钢筋混凝土排水管.docx VIP
- 2025年星海音乐学院辅导员招聘考试笔试备考试题.docx VIP
- 2025年社区党支部工作总结及2025年工作计划.docx VIP
- 水利工程竣工验收鉴定书.pdf VIP
- 中国计量大学2021-2022学年第2学期《西方经济学》期末考试试卷(B卷)含参考答案.docx
原创力文档


文档评论(0)