专 题:文件传输协议FTP概述 主 讲:qianqian |
FTP简介
直到1994年,当WWW掌管Internet时,文件传输协议(FTP)是和e-mail一样最广泛应用的Internet客户程序。它被用于作为访问Internet主机文件的一个远程外壳。使用ftp可以连接到一个FTP服务器,在可用的目录间游历,并且传输文件。
一个FTP站点可以是公用的,私有的,或者两者兼有之。使用一个私有的账号,你可以拥有访问整个网络的目录结构,或者只是特定的区域的权限。
Internet同时也是一个拥有很多允许任何人连接和传输文件的FTP服务器的中心,不管他们有没有主机上的账号。这叫做匿名FTP。当你登录到一个匿名FTP战点时,你通常使用“anonymous”作为你的用户名,“guest”或你的 e-mail地址作为密码。例如,匿名FTP经常用于发布大量的公用领域或共享软件。其中一个著名的公用FTP站点是ftp.cica.indiana.edu。
FTP主要设计目的是用于程序之中,不过FTP程序自身已经成为任何一个TCP/IP实施的重要部分。当你在Windows 3.11、Windows95或Windows NT中使用Microsoft的TCP/IP驱动程序时,FTP.exe将被安装。
实际上,FTP已经包含于Netscape和其它的WWW浏览器中,因此你可以使用浏览Web的程序同时浏览FTP服务器。
根据RFC 959所述,设计FTP协议有四个目的:
- 1. 促进文件的共享(计算机程序或数据)。
- 2. 鼓励间接地或暗示性地(通过程序)使用远程计算机
- 3. 把用户隐蔽在主机文件系统的多变性之外
- 4. 为了传输文件的可靠性和效率
为什么你要使用FTP?
如果你正在编写一个要进行相当数量的文件传输的程序,并且考虑使用FTP作为你的主要文件传输方式,你必须知道一些事情。首先,FTP是一个客户机/服务器协议。使用FTP在同一台机器把一个程序的文件传送到另外一个程序的做法是不可取的。你只能在要把文件传输到一个已知的FTP服务器的情况下才能考虑使用FTP,或者你想要编写一个通用的FTP客户程序。
有时候你可以把FTP服务器作为一个仓库来存贮你的系统中所有用户共享的文件,这是个不错的主意。它完全取决于你的项目目标是什么。如果你要让你的用户访问一系列的共享文件,FTP是一个不错的工具。
FTP没有类似VB的Open, Input #, 和 Print #等文件控制语句。如果你的项目需要你打开一个远程的文件并在文件层次打开它,FTP是无能为力的。FTP主要用于获得目录列表和传输文件。 |
FTP程序
Windows有内建的FTP程序FTP.EXE,如图1,它是一个DOS程序。

图 1 FTP 窗口.
连接和登录
运行FTP.EXE后将看到如下的提示符:
ftp> _
你可以用OPEN命令连接任何FTP站点。例如,你可以使用以下命令连接到Microsoft的公共FTP站点:
ftp> open ftp.microsoft.com <enter>
此时程序将尝试在21号端口连接到服务器。如果连接成功,你将得到一个220的回答,后面是欢迎信息。
Connected to ftp.microsoft.com.
220 ftp Microsoft FTP Service (Version 1.0).
下面你将提示输入你的用户名。对于公共访问(匿名FTP),直接打anonymous即可:
User (ftp.microsoft.com:(none)): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
下面是输入密码。如果是匿名访问输入你的EMail地址即可。
Password:
然后服务器将允许你的访问,并提示另外的欢迎信息。你可以使用一系列固定的命令来访问站点。
230-This is ftp.microsoft.com. See the index.txt file
in the root directory for more information
230 Anonymous user logged in as anonymous.
专 题:列出、改变目录 主 讲:qianqian |
列出目录
你可以使用DIR命令来列出目录。实际上,DIR并不是FTP规定的命令,但是标准的用户界面从操作系统借用了这个命令。 图2 显示了DIR命令的结果。最右边是文件或目录的名称,然后是文件日期和时间。然后是10位的文件属性。你可以通过"d"属性分别目录或文件。如果是"d",表示这是个目录。 改变目录你可以通过CD命令改变目录。和DOS命令的区别是它使用正斜杠。例如改变目录到 /developr/vb directory: ftp> cd developr/vb
250 CWD command successful.
再次使用DIR命令,你可以获得文件列表。图3 显示了 DIR命令在ftp.microsoft.com的 /developr/vb 目录的执行结果。
图 2 DIR命令 ftp>dir
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
d----- 1 owner group 0 Jul 3 13:52 bussys
d----- 1 owner group 0 Aug 9 3:00 deskapps
d----- 1 owner group 0 Oct 27 7:35 developr
----- 1 owner group 7905 Oct 5 8:53 dirmap.htm
----- 1 owner group 4510 Oct 5 8:52 dirmap.txt
----- 1 owner group 712 Aug 25 1994 disclaimer.txt
----- 1 owner group 860 Oct 5 1994 index.txt
d----- 1 owner group Aug 31 12:17 KBHelp
----- 1 owner group 7393252 Nov 28 4:04 ls-lR.txt
----- 1 owner group 914179 Nov 28 4:05 ls-lR.Z
----- 1 owner group 766409 Nov 28 4:04 LS-LR.ZIP
d----- 1 owner group 0 Oct 20 9:27 MSCorp
----- 1 owner group 28160 Nov 28 1994 MSNBRO.DOC
----- 1 owner group 22641 Feb 8 1994 MSNBRO.TXT
d----- 1 owner group 0 Oct 11 3:00 peropsys
d----- 1 owner group 0 Aug 23 21:55 Products
d----- 1 owner group 0 Oct 5 8:46 Services
d----- 1 owner group 0 Nov 22 14:38 Softlib
----- 1 owner group 5095 Oct 20 1993 support-phones.txt
----- 1 owner group 802 Aug 25 1994 WhatHappened.txt
226 Transfer complete.
1407 bytes received in 0.99 seconds (1.42 Kbytes/sec)
图 3 Microsoft的/developr/vb directory目录 ftp> dir
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
d----- 1 owner group 0 Oct 25 6:39 kb
d----- 1 owner group 0 Feb 24 11:35 public
----- 1 owner group 1571 Aug 24 1994 README.TXT
d----- 1 owner group 0 Aug 24 1994 unsup-ed
226 Transfer complete.
270 bytes received in 0.22 seconds (1.23 Kbytes/sec)
(千千VB站整理 转载请保留此信息 |
专 题:下载或上传文件 主 讲:qianqian |
下载
用ftp下载文件简单而直接。在下载之前,请保证你是在二进制模式下。ftp有两种文件传输模式,ASCII模式和二进制模式。为了转换到二进制模式,可以使用BIN命令。 ftp> bin
200 Type set to I.
返回ASCII模式,请使用ASC命令。 GET命令用来获取文件。如果你想在默认目录使用原始文件名下载文件,你要输入GET <filename> <回车>. 见图4。 你可以只输入GET,系统会提示你要下载的文件名,然后提示你存储到的新文件名(及目录)。
图 4 Get命令 ftp> get readme.txt
200 PORT command successful.
150 Opening BINARY mode data connection for readme.txt(1571 bytes).
226 Transfer complete.
1571 bytes received in 3.46 seconds (0.45 Kbytes/sec)
上传你可以使用SEND命令上传文件。当然服务器要允许你上传文件才行。如图5。
图 5 SEND命令发送文件. ftp> send
(local-file) myfile.zip
(remote-file) myfile.zip
200 PORT command successful.
150 Opening BINARY mode data connection for myfile.zip.
226 Transfer complete.
3018 bytes sent in 0.06 seconds (50.30 Kbytes/sec)
|
专 题:其它的ftp支持命令 主 讲:qianqian |
支持命令
你可以使用HELP命令获得你的ftp程序支持的命令列表,如图6。
图 6 Help命令 ftp>help
Commands may be abbreviated. Commands are:
! delete literal prompt send
? debug ls put status
append dir mdelete pwd trace
ascii disconnect mdir quit type
bell get mget quote user
binary glob mkdir recv verbose
bye hash mls remotehelp
cd help mput rename
close lcd open rmdir
ftp>
结束会话在FTP提示符输入BYE可以结束会话。 ftp> bye
<the server disconnects the client>
其它说明你给FTP程序输入的命令和FTP实际传输给FTP服务器的命令有一点不同。例如你输入DIR命令时,实际上FTP程序传给FTP服务器的是LIST命令。以下提到FTP时将指FTP协议,除非另外说明。 FTP中,端口21(控制连接)将用于传输命令;而另外一个端口用于传输数据,默认的是端口20。但是也可以用其它端口,这使得编程变得有点复杂化。 连接FTP服务器在21号端口接收初始的连接,并且保持着连接的打开状态,这个连接将用于处理FTP命令;这和HTTP不一样,HTTP是无连接协议,每次都会重建连接。另外一个独立的连接被用来传输数据。这两个连接分别叫做控制连接(Control connection)和数据连接(Data Connection) 例如,当要下载一个文件时,客户端通常发送一个PORT命令,在20号端口接受连接,然后使用RETR命令告诉服务器发送文件。服务器发送数据,然后关闭连接。 另外一个客户端可用的命令是PSAV(表示被动模式),客户端通过它告诉服务器监听一个特定的端口。然后连接到那个端口用于数据连接。作者比较喜欢使用被动模式,因为你无需接受一个连接。 如果你要使用PORT命令,最好打开20号端口或者大于1024的可用端口,然后发送一个PORT命令到服务器。1-1024端口由TCP内部保留。 FTP命令FTP使用一系列简单的命令例如LIST或RETR来完成不同的任务。每一个FTP命令用CR/LF(回车)结束。 |
专 题:服务器反馈 主 讲:qianqian |
服务器反馈
在发送FTP命令后,你将收到服务器的回应。回应信息由3位数字加空格加上一段文字信息组成。图7 列出了一些回应信息。完整的描述可以参考RFC 959文档。
图 7 返回值. 110 重启动标记回应(Restart marker reply).
它这样显示:
MARK yyyy = mmmm
yyyy是用户处理的数据流标记,而mmmm是服务器的相应标记(注意标记和“=”之间的空格).
120 服务在nnn分钟内就绪.
125 数据连接已经打开,;传输开始.
150 文件状态OK;将要打开数据连接.
200 命令OK.
202 命令未实现,在这个站点是多余的.
211 系统状态或系统帮助的回应.
212 目录状态.
213 文件状态.
214 帮助信息.
215 NAME系统类型.
220 服务对新用户就绪.
221 服务关闭控制连接.
如果合适的话推出登录.
225 数据连接打开,没有数据在传输.
226 关闭数据连接.
需要的文件操作完成。.
227 进入Passive模式(h1,h2,h3,h4,p1,p2).
230 用户登入,已处理.
250 文件操作动作OK,完成.
257 “PATHNAME”已经创建.
331 用户名OK,需要密码.
332 需要登录帐号.
350 需要进行的文件操作延迟,进一步的信息.
421 服务不可用,关闭控制连接.
当服务必须关闭时,这个回复可能适用任何目录.
425 无法打开数据连接.
426 连接关闭;传输异常中止.
450 需要进行的文件操作没有被接受.
文件不可用 (例如,文件忙).
451 操作中止;处理时发生本地错误.
452 操作未接受.
系统存储空间不足.
500 语法错误,无法识别命令.
可能包括命令太长等错误.
501 参数语法错误.
502 命令未实现.
503 命令顺序错误.
504 对于该参数命令未实现.
530 未登录.
532 存储文件需要帐号.
550 需要的操作未被接受.
文件不可用 (例如,文件未找到).
551 需要的操作异常中止;页类型未知.
552 需要的操作异常中止.
超过了存储分配空间 (对于当前目录或数据集).
553 需要的操作未被接受.
文件名不被允许.
返回值类别每一位返回值数字具有特别的含义。第一位数字有5个取值: 1 表示一个肯定的,初步的回答(这个命令被接受,并且这是其它服务器肯定回答的第一部分);2 表示一个永久的肯定回答; 3 表示一个中间层次的肯定回答,在这种情况下,服务器正在等待进一步的信息; 4 表示命令未被接受,需要的操作没有出现,担这种情况可能是暂时的; 5 表示绝对的失败。 第二个数字表示回答的类别: 0 表示语法错误; 1 表示信息内容; 2 表示有关传输链路的信息; 3 指验证或帐号信息; 4 未使用; 5 表示有关文件系统状态的信息。 第三个数字再对错误具体分类。 图 8 显示了如何分析FTP回复值的简要回顾,如果要详细的讨论,请参考RFC 959。
图 8 解释 FTP返回值. 1xx 肯定的初步的回答
2xx 肯定回答
3xx 肯定的中间回答
4xx 短暂的否定的完成回答
5xx 永久的否定的完成回答
x0x 语法错误
x1x 信息
x2x 连接
x3x 验证和帐号
x4x 未规定
x5x 文件系统
(千千VB站整理 转载请保留此信息) |
例程下载这里供大家下载的是一个用VB实现FTP的一个例子,这个例子没有用任何控件,例如Winsock或DSSock,而是直接调用wininet.dll里面的函数实现的,大家可能可以从中得到一些启发。本来斑竹要给大家讲用Winsock控件连接ftp服务器并向服务器发送前几讲说过的FTP命令来实现FTP功能的,可惜斑竹实在是太忙了,等到有机会下次再讲吧,这里先说声抱歉了。
示例下载:http://263.csdn.net/FileBBS/files/2001_12/T_926_1.zip
评论