﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-jerryhanwei-文章分类-FTP</title><link>http://www.blogjava.net/jerryhanwei/category/40410.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 22 Jun 2009 05:27:47 GMT</lastBuildDate><pubDate>Mon, 22 Jun 2009 05:27:47 GMT</pubDate><ttl>60</ttl><item><title>ftp协议命令和使用</title><link>http://www.blogjava.net/jerryhanwei/articles/283526.html</link><dc:creator>hanwei</dc:creator><author>hanwei</author><pubDate>Mon, 22 Jun 2009 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/jerryhanwei/articles/283526.html</guid><wfw:comment>http://www.blogjava.net/jerryhanwei/comments/283526.html</wfw:comment><comments>http://www.blogjava.net/jerryhanwei/articles/283526.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jerryhanwei/comments/commentRss/283526.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jerryhanwei/services/trackbacks/283526.html</trackback:ping><description><![CDATA[<table blogpost="" border="0" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td>
            <p><span id="subjcns!1p9bpz2vCfDRQsNS1ECU-vyA!114"><font size="3">
            <table blogpost="" border="0" cellspacing="0" width="100%">
                <tbody>
                    <tr>
                        <td><span id="subjcns!1p9bpz2vCfDRQsNS1ECU-vyA!113"><font size="3"><strong>FTP 协议命令</strong></font></span></td>
                    </tr>
                    <tr>
                        <td><br />
                        </td>
                    </tr>
                    <tr>
                        <td id="msgcns!1p9bpz2vCfDRQsNS1ECU-vyA!113">
                        <p>如果想自己编写一个FTP客户端程序，首先得搞清楚FTP协议中的这些命令和用法。</p>
                        <p>FTP COMMANDS</p>
                        <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The following are the FTP commands:</p>
                        <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; USER &lt;SP&gt; &lt;username&gt; &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 登录的用户名<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PASS &lt;SP&gt; &lt;password&gt; &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 密码<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACCT &lt;SP&gt; &lt;account-information&gt; &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CWD&nbsp; &lt;SP&gt; &lt;pathname&gt; &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 改变当前目录<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CDUP &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回上级目录<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SMNT &lt;SP&gt; &lt;pathname&gt; &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QUIT &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 退出<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REIN &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重新登录<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PORT &lt;SP&gt; &lt;host-port&gt; &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PASV &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 获取数据传输端口<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE &lt;SP&gt; &lt;type-code&gt; &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置数据交换的类型{A(SCII),E(BCDIC),I(mage),L(ocal byte size)}<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STRU &lt;SP&gt; &lt;structure-code&gt; &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MODE &lt;SP&gt; &lt;mode-code&gt; &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETR &lt;SP&gt; &lt;pathname&gt; &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STOR &lt;SP&gt; &lt;pathname&gt; &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用覆盖方式上传一个文件到服务器<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STOU &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; APPE &lt;SP&gt; &lt;pathname&gt; &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用追加方式上传一个文件到服务器<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ALLO &lt;SP&gt; &lt;decimal-integer&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [&lt;SP&gt; R &lt;SP&gt; &lt;decimal-integer&gt;] &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REST &lt;SP&gt; &lt;marker&gt; &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定重新下在的字节数<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RNFR &lt;SP&gt; &lt;pathname&gt; &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定需要改名的原文件<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RNTO &lt;SP&gt; &lt;pathname&gt; &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定需要改名的新文件名<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ABOR &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取消前一指令<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DELE &lt;SP&gt; &lt;pathname&gt; &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在服务器上删除指定文件<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RMD&nbsp; &lt;SP&gt; &lt;pathname&gt; &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在服务器上删除指定目录<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MKD&nbsp; &lt;SP&gt; &lt;pathname&gt; &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在服务器上创建目录&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PWD&nbsp; &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示当前目录<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LIST [&lt;SP&gt; &lt;pathname&gt;] &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp; 列出当前目录下所有文件和子目录<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NLST [&lt;SP&gt; &lt;pathname&gt;] &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp; 列出当前目录下所有文件和子目录的名字<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SITE &lt;SP&gt; &lt;string&gt; &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SYST &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STAT [&lt;SP&gt; &lt;pathname&gt;] &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HELP [&lt;SP&gt; &lt;string&gt;] &lt;CRLF&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 获取帮助<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NOOP &lt;CRLF&gt;</p>
                        <p>FTP Security commands and arguments</p>
                        <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AUTH &lt;SP&gt; &lt;mechanism-name&gt; &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ADAT &lt;SP&gt; &lt;base64data&gt; &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROT &lt;SP&gt; &lt;prot-code&gt; &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PBSZ &lt;SP&gt; &lt;decimal-integer&gt; &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MIC &lt;SP&gt; &lt;base64data&gt; &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CONF &lt;SP&gt; &lt;base64data&gt; &lt;CRLF&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENC &lt;SP&gt; &lt;base64data&gt; &lt;CRLF&gt;</p>
                        <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mechanism-name&gt; ::= &lt;string&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;base64data&gt; ::= &lt;string&gt;<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; must be formatted as described in section 9<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prot-code&gt; ::= C | S | E | P<br />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;decimal-integer&gt; ::= any decimal integer from 1 to (2^32)-1</p>
                        </td>
                    </tr>
                </tbody>
            </table>
            </font></span></p>
            <p><strong><font size="3">上面是一些ftp协议支持的命令，下面介绍一些使用实例</font></strong></p>
            <p><strong><font size="3">FTP 协议命令实战</font></strong></p>
            </td>
        </tr>
        <tr>
            <td><br />
            </td>
        </tr>
        <tr>
            <td id="msgcns!1p9bpz2vCfDRQsNS1ECU-vyA!114">
            <p>废话就不多说了，下面是用TELNET连接Serv-U测试成功的例子</p>
            <p>下载文件<br />
            ---------------------------------------------------------------------------<br />
            TELNET 127.0.0.1 21<br />
            220 Serv-U FTP Server v4.0 for WinSock ready...</p>
            <p>USER ADMIN<br />
            331 User name okay, need password.</p>
            <p>PASS ****<br />
            230 User logged in, proceed.</p>
            <p>PASV<br />
            227 Entering Passive Mode &lt;127,0,0,1,4,191&gt;</p>
            <p>REST 0<br />
            350 Restarting at 0. Send STORE or RETRIEVE.</p>
            <p>RETR test.rar<br />
            150 Opening ASCII mode data connection for test.rar &lt;94370 bytes&gt;.<br />
            226 Transfer complete.</p>
            <p>覆盖方式上传文件<br />
            ---------------------------------------------------------------------------<br />
            TELNET 127.0.0.1 21<br />
            220 Serv-U FTP Server v4.0 for WinSock ready...</p>
            <p>USER ADMIN<br />
            331 User name okay, need password.</p>
            <p>PASS ****<br />
            230 User logged in, proceed.</p>
            <p>STOR test.dat<br />
            150 Opening ASCII mode data connection for test.dat</p>
            <p>PASV<br />
            227 Entering Passive Mode &lt;127,0,0,1,4,191&gt;</p>
            <p>...创建另一条连接到指定端口然后向其发送数据...</p>
            <p>追加方式上传文件<br />
            ---------------------------------------------------------------------------<br />
            TELNET 127.0.0.1 21<br />
            220 Serv-U FTP Server v4.0 for WinSock ready...</p>
            <p>USER ADMIN<br />
            331 User name okay, need password.</p>
            <p>PASS ****<br />
            230 User logged in, proceed.</p>
            <p>APPE test.dat<br />
            150 Opening ASCII mode data connection for test.dat</p>
            <p>PASV<br />
            227 Entering Passive Mode &lt;127,0,0,1,4,191&gt;</p>
            <p>...创建另一条连接到指定端口然后向其发送数据...</p>
            <p>重命名文件和目录<br />
            ---------------------------------------------------------------------------<br />
            TELNET 127.0.0.1 21<br />
            220 Serv-U FTP Server v4.0 for WinSock ready...</p>
            <p>USER ADMIN<br />
            331 User name okay, need password.</p>
            <p>PASS ****<br />
            230 User logged in, proceed.</p>
            <p>RNFR sss.rar<br />
            350 File or directory exists; ready for destination name</p>
            <p>RNTO stock.rar<br />
            250 RNTO command successfull.</p>
            <p>删除文件<br />
            ---------------------------------------------------------------------------<br />
            TELNET 127.0.0.1 21<br />
            220 Serv-U FTP Server v4.0 for WinSock ready...</p>
            <p>USER ADMIN<br />
            331 User name okay, need password.</p>
            <p>PASS ****<br />
            230 User logged in, proceed.</p>
            <p>DELE test.dat<br />
            250 DELE command successfull.</p>
            <p>建立和删除目录<br />
            ---------------------------------------------------------------------------<br />
            TELNET 127.0.0.1 21<br />
            220 Serv-U FTP Server v4.0 for WinSock ready...</p>
            <p>USER ADMIN<br />
            331 User name okay, need password.</p>
            <p>PASS ****<br />
            230 User logged in, proceed.</p>
            <p>MKD myDir<br />
            257 "/myDir" directory created.</p>
            <p>RMD myDir<br />
            250 RMD command successfull.</p>
            <p>退出连接<br />
            ---------------------------------------------------------------------------<br />
            TELNET 127.0.0.1 21<br />
            220 Serv-U FTP Server v4.0 for WinSock ready...</p>
            <p>USER ADMIN<br />
            331 User name okay, need password.</p>
            <p>PASS ****<br />
            230 User logged in, proceed.</p>
            <p>QUIT<br />
            221 Goodbye!</p>
            </td>
        </tr>
    </tbody>
</table>
<p articalinfo="">发表于 @ <a href="http://blog.csdn.net/zhsp1029/archive/2008/08/28/2845305.aspx" title="permalink">2008年08月28日 19:54:00</a>|<a href="http://blog.csdn.net/zhsp1029/archive/2008/08/28/2845305.aspx#FeedBack" title="评论">评论(<span id="FeedbackCount_2845305">0</span>
<script type="text/javascript">AddFeedbackCountStack("2845305")</script>
)</a>|<cite><a href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&amp;u='+escape(d.location.href)+'&amp;c='+escape(t),'saveit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();" class="fav_csdnstylebykimi" title="收藏到我的网摘中，并分享给我的朋友">收藏</a></cite></p>
<span id="Post.ascx_ViewPost_PreviousAndNextEntriesDown">
<h3><a href="http://blog.csdn.net/zhsp1029/archive/2008/08/28/2845683.aspx">新一篇:&nbsp;关于最近项目总是不顺的一点感受</a>&nbsp;|&nbsp;<a href="http://blog.csdn.net/zhsp1029/archive/2008/08/19/2793095.aspx">旧一篇:&nbsp;天哪，终于恢复了</a></h3>
</span><img src ="http://www.blogjava.net/jerryhanwei/aggbug/283526.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jerryhanwei/" target="_blank">hanwei</a> 2009-06-22 11:08 <a href="http://www.blogjava.net/jerryhanwei/articles/283526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>