`
jgsj
  • 浏览: 961199 次
文章分类
社区版块
存档分类
最新评论

Ftp客户端概要设计

 
阅读更多

Ftp客户端概要设计


1.概述

ftp是基于TCP的文件传输协议,主要是用于控制远程文件,如下载、上传、续传、重命名、删除等。其命令是基于可见字符,易于理解的方式交互的。客户端与服务器端的交互遵循一应一答的方式,而且各命令间遵循一定的顺序。

FTP的应答原则:

a.所有应答都以3个数字开头以“\r\n”结束

b.一个应答的第4位如果为’-’,表示还有后续应答,说明一个命令对应了多个应答

c.对应一个命令的多个应答,其前面的3个数字一样

d.非命令的传输都需要开通另外的通道,并且事先需要说明是主动还是被动


FTP客户端需要实现的功能:

a.登录、退出

b.列出指定路径下的所有文件名称

c.下载文件

d.上传文件

e.续传文件(上传和下载)

f.创建目录

g.重命名文件

功能要求:

a.同时可以上传和下载多个文件,并不相互影响;

b.随时可以终止正在上传或下载的文件,并后续续传;

c.在上传和下载的过程中不影响其他命令的执行;

d.上传和下载文件可以显示进度信息


2.模块设计

根据概述中的说明,建立如下的模块关系:


对外操作的接口最终转入控制实例中操作。对于外部传入的ftp基本信息(如服务器名、端口号、用户名密码等信息)需存入基本信息模块。操作模块依赖基本信息模块和传输控制模块。一个操作模块完成简单的一次操作,如列出文件列表、上传文件、下载文件。如果需要多个上传或者下载操作则创建多个操作模块。

控制实例的主要作用是:有效组织一个或多个操作模块。


3.接口设计

由于时间关系,这边实现概述中部分功能。

/**

* 设置当前字符集

*/

bool SetCharset(char* charSet);

/**

* 登录ftp服务器

*@host 主机名称,IP地址或者域名

*@port ftp服务器端口,默认可以填21

*@userName ftp用户名,为NULL表示匿名登录

*@password 用户名对应的密码

*@return 登录成功返回true,否则返回false

*/

bool Login(char* host,unsigned shortport,char* userName,char* password);

/**

* 退出ftp服务器,会中断所有传输操作

*@return 登录成功返回true,否则返回false

*/

bool Logout();

/**

* 创建目录

*@dirPath 以'/'开头,必须为绝对路径

*/

bool Mkdir(char* dirPath);

/**

* 将本地文件上传到服务器上

*@localFile 本地文件

*@remoteFile 服务器的文件(绝对路径)

*@callback 传输回调函数,参考FtpTransferCallback的定义

*@lpcontext 回调函数的上下文参数

*@return 返回控制句柄,通过该句柄可以终端传输等

*/

int PutFile(char* localFile,char*remoteFile,FtpTransferCallback callback,LPVOID lpcontext);

/**

* 将内存中的数据上传到服务器上的文件中保存

*@buffer 内存中的数据

*@nLen 数据长度

*@remoteFile 服务器的文件(绝对路径)

*@callback 传输回调函数,参考FtpTransferCallback的定义

*@lpcontext 回调函数的上下文参数

*@return 返回控制句柄

*/

int PutBuffer(BYTE* buffer,int nLen,char*remoteFile,FtpTransferCallback callback,LPVOID lpcontext);

/**

* 获取下载服务器上的文件

*@remoteFile 服务器上的路径(绝对路径)

*@localFile 本地文件路径

*@callback 传输回调函数,参考FtpTransferCallback的定义

*@lpcontext 回调函数的上下文参数

*@return 返回控制句柄

*/

int GetFile(char* remoteFile,char*localFile,FtpTransferCallback callback,LPVOID lpcontext);

/**

* 下载服务器上的文件到指定的内存中

*@remoteFile 服务器上的文件(绝对路径)

*@buffer 指定的内存

*@nLen 可用的内存大小

*@callback 传输回调函数,参考FtpTransferCallback的定义

*@lpcontext 回调函数的上下文参数

*@return 返回控制句柄

*/

int GetFileToBuffer(char* remoteFile,BYTE*buffer,int nLen,FtpTransferCallback callback,LPVOID lpcontext);

/**

* 在ftp服务器上查找相应的文件

*@findFile 需要查找的文件(绝对路径),查找绝对路径下的所有文件

*@return 成功返回查找到的文件个数

* 没有找到文件则返回0

*/

int FindFile(char*findFile);

/**

* 获取下一个文件信息

*@lpFileInfo 文件属性

*@return 成功返回true,遍历完或失败返回false

*/

bool NextFile(OUT LPFtpFileInfolpFileInfo);

附件1 FTP命令表:

命令

描述

ABOR

中断数据连接程序

ACCT <account>

系统特权帐号

ALLO <bytes>

为服务器上的文件存储器分配字节

APPE <filename>

添加文件到服务器同名文件

CDUP <dir path>

改变服务器上的父目录

CWD <dir path>

改变服务器上的工作目录

DELE <filename>

删除服务器上的指定文件

HELP <command>

返回指定命令信息

LIST <name>

如果是文件名列出文件信息,如果是目录则列出文件列表

MODE <mode>

传输模式(S=流模式,B=块模式,C=压缩模式)

MKD <directory>

在服务器上建立指定目录

NLST <directory>

列出指定目录内容

NOOP

无动作,除了来自服务器上的承认

PASS <password>

系统登录密码

PASV

请求服务器等待数据连接

PORT <address>

IP 地址和两字节的端口 ID

PWD

显示当前工作目录

QUIT

从 FTP 服务器上退出登录

REIN

重新初始化登录状态连接

REST <offset>

由特定偏移量重启文件传递

RETR <filename>

从服务器上找回(复制)文件

RMD <directory>

在服务器上删除指定目录

RNFR <old path>

对旧路径重命名

RNTO <new path>

对新路径重命名

SITE <params>

由服务器提供的站点特殊参数

SIZE <filename>

获取服务器上文件的大小

SMNT <pathname>

挂载指定文件结构

STAT <directory>

在当前程序或目录上返回信息

STOR <filename>

储存(复制)文件到服务器上

STOU <filename>

储存文件到服务器名称上

STRU <type>

数据结构(F=文件,R=记录,P=页面)

SYST

返回服务器使用的操作系统

TYPE <data type>

数据类型(A=ASCII,E=EBCDIC,I=binary)

USER <username>>

系统登录的用户名

附件2 FTP响应表:

响应代码

解释说明

110

新文件指示器上的重启标记

120

服务器准备就绪的时间(分钟数)

125

打开数据连接,开始传输

150

打开连接

200

成功

202

命令没有执行

211

系统状态回复

212

目录状态回复

213

文件状态回复

214

帮助信息回复

215

系统类型回复

220

服务就绪

221

退出网络

225

打开数据连接

226

结束数据连接

227

进入被动模式(IP 地址、ID 端口)

230

登录因特网

250

文件行为完成

257

路径名建立

331

要求密码

332

要求帐号

350

文件行为暂停

421

服务关闭

425

无法打开数据连接

426

结束连接

450

文件不可用

451

遇到本地错误

452

磁盘空间不足

500

无效命令

501

错误参数

502

命令没有执行

503

错误指令序列

504

无效命令参数

530

未登录网络

532

存储文件需要帐号

550

文件不可用

551

不知道的页类型

552

超过存储分配

553

文件名不允许


作者:wjh_2010@163.com

如果需要动态库(共享库)请以邮件的方式联系作者。

分享到:
评论

相关推荐

    FTP服务器客户端开发概要设计&&详细设计.doc

    FTP服务器客户端开发概要设计&&详细设计

    FTP客户端设计文档.doc

    3 概要设计 3.1功能简述 3.2客户端界面设计 3.3客户端连接流程图 3.4下载子模块流程图 3.5上传子模块流程图 4 详细设计 4.1启动FTP服务器 4.2启动客户端器 4.3客户端接受服务器信息 4.4获取FTP服务器中的目录 4.5 ...

    FTP客户端的创建

    FTP客户端的创建,并且有实验文档(需要分析,概要设计等等)

    编程语言+ASP.NET+FTP客户端程序开发+毕业设计和编程实战

    内容概要:FTP客户端设计与开发,基于ASP.NET技术。 适用人群:ASP.NET框架开发1-2年的编程人员,希望通过项目实战,检验自己对ASP.NET编程的掌握程度,系统学习ASP.NET程序开发的人员。 项目说明:完整的FTP管理...

    VC++ FTP下载程序(FTP客户端)

    (1)概要 (2)上传和下载 (3)用户FTP和匿名FTP (4)ASCII和Binary (5)Port和Passive 2、WinInet的中FTP的基本操作 (1)头文件 (2)打开连接和关闭 (3)CFtpConnection的操作函数 三、完成进度-----------...

    perl-poe-component-simpleftp:一个简单的 POE FTP 客户端库

    POE::Component::Client::SimpleFTP - POE 的简单 FTP 客户端库 版本 This document describes v0.004 of POE::Component::Client::SimpleFTP - released November 04, 2014 as part of POE-Component-Client-...

    FTP.tar.gz_TCP传输文件 ftp_ftp socket_ftp点对点_site:www.pudn.com_tcp文

    概要设计:基于TCP/IP可靠的点对点传输协议,通过网络编程实现服务器和客户端的数据传输。 详细设计: 首先建立SOCKET套接字,绑定端口号和相应的IP,客户端首先向服务器发送GET filename,服务器收到这个命令后...

    tftp:TFTP客户端和服务器实施,作为奥克兰大学课程的一部分完成

    ftp TFTP客户端和服务器实施,作为奥克兰大学课程的一部分完成 (如果人们发现您正在为同一课程复制您的作业,那么……您有责任不要这样做。) 概要 java Server [--port ] [--timeout ] [--attempts ] [--enable-...

    搜索引擎设计软件程序源码+数据库+WORD毕业设计论文文档.zip

    4.2系统概要设计 14 4.2系统实现目标 15 5 系统详细实现 16 5.1实现环境配置 16 5.2功能实现 16 5.2.1 建立索引 16 5.2.2 文件搜索实现 18 5.2.3 数据库的连接配置 20 5.2.4 数据库搜索实现 20 5.2.5 后台数据编辑...

    IIS6.0 IIS,互联网信息服务

     第二篇 IIS之FTP服务器 一、建立你的FTP站点 第一个FTP站点(即“默认FTP站点”)的设置方法和更多FTP站点的建立方法请参照前文Web服务器中相关操作执行。需要注意的是,如果你要用一个IP地址对应多个不同的FTP...

    asp.net知识库

    利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL...

    python入门到高级全栈工程师培训 第3期 附课件代码

    01 Python开发系列课程概要 02 Python作业要求以及博客 03 编程语言介绍 04 Python种类介绍 05 Python安装以及环境变量的操作 06 Python初识以及变量 07 Python条件语句和基本数据类型 08 Python while循环语句以及...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    多用户在线Ftp程序 第9周 上节回顾 paramiko模块详解 ssh密钥讲解 进程与线程 多线程 多线程案例 主线程与子线程 线程锁 线程之信号量 线程之Event 队列Queue 作业之主机批量管理 第10周 心灵分享 上节回顾 多...

    Sming:Sming-用于高效本机ESP8266开发的开源框架

    概要 出色的性能和内存使用(Sming编译为本地固件!)。 快速且用户友好的开发。 简单而强大的硬件API包装器。 与标准兼容-在几行代码中使用任何流行的硬件。 内置文件系统: 。 内置功能强大的无线模块。 ...

    HTML开发王

    目录: 目录 ...第1章 建立首要的、基础的正确认知 1.1 internet和万维网 ...1.1.2 w3c是什么 ...19.3.1 使用ftp服务器建立上传网站空间 19.3.2 虚拟主机 19.3.3 管理和上传网站 19.3.4 管理局域网站点

    TCPIP详解--共三卷

    27.3.6 来自一个未知IP地址的匿名FTP 330 27.4 小结 331 第28章 SMTP:简单邮件传送协议 332 28.1 引言 332 28.2 SMTP协议 332 28.2.1 简单例子 332 28.2.2 SMTP命令 334 28.2.3 信封、首部和正文 335 28.2.4 中继...

    TCP_IP详解卷1

    27.3.6 来自一个未知IP地址的匿名FTP 330 27.4 小结 331 第28章 SMTP:简单邮件传送协议 332 28.1 引言 332 28.2 SMTP协议 332 28.2.1 简单例子 332 28.2.2 SMTP命令 334 28.2.3 信封、首部和正文 335 28.2.4 中继...

    TCPIP详解卷[1].part04

    27.3.6 来自一个未知IP地址的匿名FTP 330 27.4 小结 331 第28章 SMTP:简单邮件传送协议 332 28.1 引言 332 28.2 SMTP协议 332 28.2.1 简单例子 332 28.2.2 SMTP命令 334 28.2.3 信封、首部和正文 335 28.2.4 中继...

Global site tag (gtag.js) - Google Analytics