FTP编程(一)
FTP(File Transfer Protocol),即文件传输协议,是Internet中相当重要的应用之一。
其功能是用户可以通过FTP协议从FTP服务器下载或者上传文件,它被整合在浏览器中,用户可以利用浏览器通过超链接,下载服务器开放的任意文件,达到资源共享的目的。
FTP是一种C/S结构,但是与一般的Socket网络应用程序的最大差别是在于其定义了服务器端与客户端的行为模式,即相关指令、响应、传输的数据类型。
在其RFC(RFC959 File Transfer Protocol)中强调FTP的目的为:文件共享,通过应用程序直接或者间接使用远程主机,提供一致性的协议,提供可靠及有效率的数据传输。
FTP结构
一般的c/s结构,只会在服务器端与客户端建立一条socket连接,在此基础上处理各种操作。而FTP则是在服务器与客户端之间建立两个socket连接,一个以FTP默认端口21作为两者间的通信连接,而另一个则用于客户端传输指令与服务器端相应结果。
- FTP服务器端分为ProtocolInterpreter(PI)与Data Transfer Process(DTP)两个模块。
- FTP服务器端PI用来建立服务器socket连接以及监听并接受处理FTP客户端的连接请求,此链接会一直持续到客户端结束FTP应用程序为止。
- FTP服务器端的DTP专门用来处理FTP所定义的特殊指令,并将执行结果或信息返回到客户端。它主要是负责传输数据。
- FTP客户端分为Protocol Interpreter(PI)、Data Transfer Process(DTP)及User Interface(UI)三部分。
- FTP客户端PI是用来与服务器建立连接的。
- FTP客户端DTP用来将用户输入的FTP指令传输到服务器端处理,并且接受服务器端响应。
- FTP客户端UI只是用户与PI的交互界面。
FTP指令
FTP命令包括访问命令、文件管理命令、数据格式命令、端口定义命令、文件传输命令和杂项传输命令。
- 访问命令
- USER-向远程主机表明自己的身份,需要口令时,必须输入口令。格式为user user-name[password][account]。
- PASS-要求输入密码,表示为PASS xxxx。
- ACCT-账号。
- REIN-重新初始化,即重置所有参数,重新开始。
- QUIT-结束与服务器的FTP会话并退出FTP环境。
- ABOR-通知服务终止以前的ftp命令和与之相关的数据传送。
- 文件管理命令
- CWD 目录名-改变工作目录。
- CDUP-回到上一层目录。
- DELE 文件名-删除。
- LIST 目录名-列举子目录和文件。
- NLST 目录名-列举子目录和文件。
- PWD-显示当前路径。
- MKD 目录名-在指定路径下创建目录。
- RMD 目录名-删除指定目录。
- RNFR 旧文件名-标注被改文件名。
- RNTO 新文件名-更改文件名。
- SMNT 文件目录名-结构加载。
- 数据格式命令
- TYPE A(ASCII) or E(EBCDIC) or N(Nonprint) or T(TELNET)-定义文件类型和打印格式。
- STRU F(File) or R(Record),P(Page)-定义数据的组织形式。
- MODE S(Stream) or B(Block) or C(Compressed)-定义传输模式。
- 端口定义命令
- PORT a,b,c,d,e,f-abcd组成ip地址,,后两位是端口地址,端口=e*256+f。
- PASV 主机和端口地址-要求服务器DTP在指定的端口侦听。
- 文件传输命令
- RETR 文件名-使服务器DTP传送指定路径内的文件副本到服务器或用户DTP。
- STOR 文件名-使服务器DTP接收数据,并将数据保存在服务器文件中。
- APPE 文件名-如果文件存在,则数据附加在文件之后。
- ALLO 文件名-在服务器上分配文件的空间。
- REST 文件名-重新开始传输文件。
- STAR 文件名-返回控制连接状态。
- 杂项传输命令
- HELP-获取帮助。
- NOOP-使服务器返回OK。
- SITE-提供服务器系统信息。
- SYST-确定服务器上的操作系统。
常用命令
- 登录
- 方法一:输入命令 ftp hostname;命令提示符由C:\>变为ftp>。
- 方法二:先输入命令 ftp 启动FTP,再用命令 open hostname 命令登录服务器。
- 查看
- dir-显示目录和文件列表。
- ls-显示简易的文件列表。
- 格式
- type-查看当前的传输方式。
- ascii-设定传输方式为ASCII码方式。
- binary-设定传输方式为二进制方式。
- 下载
- get-get filename [newname],可以不写newname,文件会用原名保存,下载单个文件。
- mget-mget filename [filename ……],下载多个文件。
- 上传
- put-put filename [newname],上传指定文件。
- 结束
- close-结束与服务器的FTP会话。
- quit-结束与服务器的FTP会话并退出FTP环境。
注意:
- 如果由于用户名或密码错误导致登录失败,可以用user命令重新登录。
- 在输入密码时,屏幕是不会显示输入的密码的,直接回车就行了,密码正确或者失败都会有提示。
- mget和dir命令可以使用通配符“*”和“?”。
- FTP的传输类型分为ASCII码方式和二进制方式两种,默认情况下,FTP为ASCII码传输方式。
- .txt、.htm等文件应采用ASCII码方式传输。
- .exe或图片、视频、音频等文件应采用二进制方式传输。
- 下载的文件将保存在默认路径下(即进入ftp之前的路径),也可以使用 lcd 命令重新设置下载目录。
- 如果将本机设置为ftp服务器,使用本机连接自己,那么hostname可以是localhost,也可以是127.0.0.1,也可以是自己的ip地址,如果端口更改了(不是21),那在hostname后加上更改后的端口号。
FTP响应码说明
- 1系列(信息已被服务器正确接收,但被处理。)
- 110 新文件指示器上的重启标记
- 120 服务器准备就绪的时间(分钟数)
- 125 打开数据连接,开始传输
- 150 打开连接
- 2系列(信息已被服务器处理完毕。)
- 200 成功
- 202 命令没有执行
- 211 系统状态回复
- 212 目录状态回复
- 213 文件状态回复
- 214 帮助信息回复
- 215 系统类型回复
- 220 服务就绪
- 221 退出网络
- 225 打开数据连接
- 226 结束数据连接
- 227 进入被动模式(IP 地址、ID 端口)
- 230 登录因特网
- 250 文件行为完成
- 257 路径名建立
- 3系列(信息已被服务器正确接收,正在处理。)
- 331 要求密码
- 332 要求帐号
- 350 文件行为暂停
- 4系列(信息处理暂时错误。)
- 421 服务关闭
- 425 无法打开数据连接
- 426 结束连接
- 450 文件不可用
- 451 遇到本地错误
- 452 磁盘空间不足
- 5系列(信息处理永久错误。)
- 500 无效命令
- 501 错误参数
- 502 命令没有执行
- 503 错误指令序列
- 504 无效命令参数
- 530 未登录网络
- 532 存储文件需要帐号
- 550 文件不可用
- 551 不知道的页类型
- 552 超过存储分配
- 553 文件名不允许
FTP流程
(1)用户身份验证(2)数据传输(3)结束FTP
使用FTP之前,必要的是将计算机设置为FTP服务器,可以借助一些软件来实现,比如Serv-U,但是这个的参数设置比较复杂,网上也有很多网友写的小软件,比如这个(一个网友写的小软件)
http://download.csdn.net/download/dud163/777586。
至于Serv-U的使用指南,网上很多:http://www.wangyeba.com/Article/rjjx/wlgj/200811/20081126161518.shtml等。
现在就来试一试,以http://download.csdn.net/download/dud163/777586这个网友的软件为例,在其中的设置如下:
其中用户名为sky,密码为123。
并在D盘下新建一个文件夹(用来测试),文件名为“test”,文件夹中新建一个txt文档,名为“test.txt”。
打开命令提示符,准备连接ftp服务器(其实就是本机)。
这里显示的目录就是默认的下载目标路径。
使用open localhost登录ftp服务器
查看文件目录并下载test.txt
关闭ftp连接
查看下载的文件。
至此,一次完整的ftp操作完成了。