Giter VIP home page Giter VIP logo

ftpclient's Introduction

FTP客户端的初步实现和keepalive/断点续传的实现

一、动机

FTP协议是文件传输协议,是用于在网络上进行文件传输的一套标准协议。其采用客户端-服务器模式。它运行在应用层。在互联网的新时代,认识并理解一门古老而有效的网络文件传输技术是很有必要的。Keepalive和断点续传则是FTP服务端所应该进一步实现的功能,我们为了能够更好地理解FTP的机制,并增强FTP服务器的鲁棒性、适用性,增强其功能,特地实现了这两个功能。

二、FTP客户端的实现

交互式界面的实现

为了方便使用 FTP 客户端,我们提供了一个类似 bash 的交互式界面。为了方便用户查看信息,我们使用加粗、颜色等方式突出信息(如 prompt 和错误信息),在 prompt 中打印本地目录与远程服务器目录便于用户文件传送。除了基本的 FTP 命令之外,我们实现了可以同时打印远程文件操作权限、大小以及名称的 ls 命令(lh),为了方便还提供了在本地目录树中移动的命令(cls=client-side-ls, cpwd=client-side-pwd)。考虑到传送或接收大文件可能会需要较长时间,我们依据目标文件的大小信息实现了在上传或下载时动态更新的进度条。

三、Keepalive的实现

通过周期性发送 NOOP 报文的方式实现。程序会在在交互式界面中等待用户输入以及上传或下载大文件时在后台周期性发送 NOOP 以维持 control connection 不断开。

断点续传的另一种实现

检查本地与远程文件的大小,使用 REST 命令将文件指针移到合适的位置继续下载。

四、断点续传的实现

我们实现的是下载文件时FTP客户端的断点续传。我们实现的功能是从FTP服务器上下载数据时如果断点,能够实现续传。

完成步骤:

1.初步处理

设立一个继承FTP的类MyFTP类。在其中定义ftp_login()函数,用于调用FTP类中的connect和login函数进行连接和登录。

2.读取远端待下载文件和本地目标文件的基本信息

我们实现的简易断点续传主要读取这两个文件的长度信息。远端文件用SIZE命令请求读取,本地文件用os.stat(local_path).st_size函数直接读取。如果此时两个文件大小相等,则认为已经传输结束,无需断点续传,程序直接结束。

3.远程文件断点续传

我们从断点处开始进行传输,来完成断点续传。断点处定义为本地目标文件的大小。即:我们传输远程文件的剩余部分。文件按块传输,一次传输1024字节。 我们通过transfercmd('RETR'+remote_file_name,local_file_size)函数发送RETR命令来指定续传的开始位置并建立一个连接。 然后,我们用这个连接接收数据到data数据块,然后把data数据块用本地文件的读取机制写入到目标文件中。目标文件大小和远程文件大小相等后认为传输完成。

五、实验感想

从FTP客户端的实现,我们认识到了理解网络协议原理对于实现应用的重要性。我们运用更底层的函数实现FTP客户端,和运用FTP客户端封装好的函数进一步实现断点续传和KeepAlive功能。我们也感受到了自己用代码实现网络编程并经过调试让它运行起来的乐趣。

六、人员分工

金奕成:FTP客户端的实现、程序整合修改 胡树弦:FTP客户端的实现 倪铭坚:断点续传的实现 王士珉:KeepAlive功能的实现

ftpclient's People

Contributors

hatsu3 avatar husimplicity avatar sccdnmj avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.