计算机网络原理FTP实验实验报告.docxVIP

  1. 1、本文档共2页,可阅读全部内容。
  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文档。上传文档
查看更多

计算机网络原理FTP实验报告

XXXXXXXXXXXXXXXXX

实验综述:

本实验中,笔者通过Socket编程实现了一个简单的FTP协议。实现的程序包括客户端〔client.cpp〕和效劳端〔server.cpp〕两个局部,并支持如下功能:

GET命令〔下载效劳端文件到客户端所在目录〕;

PUT命令〔上传客户端文件到效劳端工作目录〕;

PWD命令〔打印效劳端工作目录〕;

DIR命令〔列出效劳端工作目录下的文件〕;

CD命令〔改变效劳端工作目录〕;

?命令〔查看帮助〕;

QUIT命令〔关闭客户端与效劳端的控制连接并退出客户端和效劳端〕。

上述支持的命令中,除?命令和QUIT命令外,命令执行时,客户端会先与效劳端建立数据连接,在数据连接上完成传输后再断开设计连接,从而实现了FTP协议的设计思想。最终实验程序能够正确完成FTP协议根本的文件传输功能,对较大的文件同样支持,符合本实验的要求。

设计思路说明:

本实验的两个核心是FTP连接模型的建立和文件、数据的传输,笔者对二者的实现思路分别如下所述。

FTP的连接建立过程如下:

效劳器启动后,建立控制连接Socket并监听控制连接端口;

客户端启动并连接至该端口;

效劳器接受来自客户端的连接,此时控制连接建立;

效劳器建立数据连接Socket,将其绑定在数据连接端口上并监听;

客户端每接收到除?命令和QUIT命令外的任一命令时,判定命令格式是否合法,将合法的命令发送到效劳器,等待来自效劳器的响应;

效劳器接收到命令后,监听数据连接端口等待连接,通过控制连接向客户端发送响应后等待客户连接至数据端口;

客户端接收到响应后,连接到数据端口,等待来自效劳器的响应;

效劳器接受来自客户端的连接,此时数据连接建立。效劳器通过数据连接向客户端发送响应;

客户端接收到响应后,开始数据传输操作;

数据传输完成后,客户端关闭数据Socket,效劳端关闭接收客户端数据连接所得的Socket;

客户端接收到QUIT命令时,将命令发送给效劳器后,关闭控制连接Socket并退出;效劳器接收到QUIT命令时,关闭自身的控制连接Socket、自身的数据连接Socket并退出。

各命令的数据传输过程如下:

GET命令和PUT命令:

这两条命令用于进行文件的传输,文件的传输以4096字节大小的块〔块大小可通过修改DATA_BUFFER_SIZE宏更改〕进行。传输过程如下:

发送方通过Linux的stat结构获得文件的大小,将其以4字节的块发送给接收方,发送方、接收方分别计算出文件的块数〔块大小为4096〕,便于后续使用。

发送方通过Linux的stat结构获得文件的权限,将其以mode_t大小的块发送给接收方,接收方保存文件的权限以便后续使用。

以a)步计算出的文件的块数作为循环次数,发送方对待发送文件循环读入,每次读入4096字节的存入一长4096字节的读缓存中,先将实际读入的字节数〔即read函数的返回值〕以4字节的块发送给接收方,再将读缓存的内容以4096字节的块发送给接收方。接收方根据接收到的实际读入的字节数,将接收到的缓存的有效局部写入新文件中。

上一步骤完成后,利用fchmod函数,将b)步接收到的文件权限赋予新文件。此时传输完成。

PWD命令、DIR命令和CD命令:

这三条命令的响应均以一块4096字节的缓存发送,效劳器端将响应写入缓存中,再将缓存以4096字节的块发送给客户端,客户端接收后进行相应的操作。

思考题答复:

答:

建立两个连接分别传输命令和数据,实现了控制和数据传输的别离,这样做在多线程实现时好处有二:一是在数据传输时,控制连接仍可实现对命令的响应;二是数据传输不会影响到控制命令的传输,这不仅使得编程更加方便,而且即使数据传输出错或卡死,客户端和效劳端仍可对其他命令作出响应。

答:

主动方式和被动方式的控制连接建立过程相同,区别在于数据连接的建立过程:主动模式下,由客户端指定并翻开数据连接使用的端口并通知效劳器连接该端口建立连接;而被动模式下,由效劳器指定并翻开数据连接使用的端口并通知客户端连接该端口建立连接。设计两个模式是因为主动模式下,效劳器对客户端数据连接端口的连接可能会被客户端的防火墙屏蔽,而被动模式下,客户端对效劳器数据连接端口的连接可能会被效劳器的防火墙屏蔽,故二者各有利弊。

答:

原因是传输每个文件时,客户端都会与效劳器建立数据连接,传输完毕这一文件后再断开,从而大大降低了传输效率。可以考虑在文件足够小时,将多个文件在一次数据连接建立后就传送过去,从而减少建立连接所占用的时间,提高传输速度。

您可能关注的文档

文档评论(0)

199****4744 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:7002121022000045

1亿VIP精品文档

相关文档