[关闭]
@juda 2016-03-26T15:37:09.000000Z 字数 893 阅读 764

FTP server/client report

作者:周耀达

简介

这是一个简单版FTP server/client工具,按照RFC 959标准实现。其中FTP client经过portal.sjtu.edu.cn服务器验证正确。

功能

[1] 基础功能:登录,列出目录下所有文件,上传文件,下载文件,删除服务器端文件。
[2] 中量级文件传输: 可以成功传递较小(实验数据大小644KB)文本文件。对于非文本文件,由于未实现二进制方式传输,暂时不可行。
[3] 多用户连接(待验证):server部署在linux下时可采用多用户连接版本。windows下不支持此功能。

实现及讨论

[1] 连接建立:对于server和client直接的通信,采用socket的TCP连接方式。server控制连接默认绑定21端口。client控制连接采用随机高位端口。对于数据连接,采用passive模式,即由server端开放高位端口进行监听,并告知client监听端口,等待client主动连接。(对于port模式,即由client端开放高位端口进行监听等待server主动连接,容易受到防火墙干扰,且对server端消耗大,并未实现)
[2] 接收大量数据:socket的recv功能是需要指定接收字节长度的。在接收文件长度未知时设置socket的超时等待功能,一旦等待超时或者接收空内容则判断接收完毕。
[3] 多用户连接:由于socket是阻塞实现的,默认情况是一次只能连接一个用户。为了实现多用户连接,采用了多进程的方法。在linux环境下采用fork函数创建新进程。
[4] 在输入密码阶段采用了python的getpass库隐藏密码,保护了用户隐私。
[5] 已知的问题:在网络不好的情况下,由于超时机制的存在,很容易导致数据传输不完整,引起程序运行出现混乱最终崩溃。
[6] 由于作者PC是windows环境,所以无法在linux环境下验证多用户server的正确性。但是考虑到新建进程并不复杂,正确性应该还是可以保证的。
[7] 由于实现的功能并不多,代码并不复杂。作者花了80%的时间在和糟糕的校园网做斗争以及熟悉FTP数据传输方式上了。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注