热情软件屋

 

执行FTP命令总是返回500


编号:QA003709
建立日期: 2000年12月25日 最后修改日期:2000年12月27日
所属类别:

xcy:
    1) 我的环境是:W2000,并设为FTP服务器。帐号为 abc 密码为 xyz
     这些我在DOS窗口中测试正常,可以随意上传下载文件。
    2)我只在 http://codeguru.earthweb.com/internet/ftpclient.shtml 上下载 的那个 demo project 上加了一个按钮然后加了如下消息处理函数:
     CFTPclient ftp;
     connect to FTP server
     if(!ftp.LogOnToServer("computerxcy",21,"abc","xyz","","","","",0,0)) {
     MessageBox(ftp.m_retmsg);
     return;
     }
     /* but this segment could be exec correctly. Is "CWD" one of ftp command?
     if(!ftp.FTPcommand("CWD /xcy")){
     MessageBox(ftp.m_retmsg);
     return;
     }
    
     */
     /* will return error.*/
     if(!ftp.FTPcommand("PROMPT")){
     MessageBox(ftp.m_retmsg);
     return;
     }
    // file://will return error again.
    if(! ftp.FTPcommand("get d.txt d:\\xcy\ls\d.txt")){
     MessageBox(ftp.m_retmsg);
     return;
     }
     // disconnect from server
     ftp.LogOffServer();
    
    //---------------
    3)我主要想用ftp.FTPcommand 执行“ mget”的FTP命令,可是我现在除了Phil Anderson. 提到的“QUIT”和那个“CWD" 能执行外,其他命令都不能执行。
    总是返回500 ‘...’command not understood
    对了,那个CWD是什么,我在FTP命令集中怎么找不到呢?
    All these,Thanks.

回答:

    FTPcommand只能执行标准的FTP指令,你说的get、mget都不是FTP指令。下载文件的指令是RETR,而且格式也不是你说的那样。服务器返回500是正常的。CWD是标准的FTP命令,是改变目录的意思。FTP命令集是在RFC959中定义的(参考QA002804 "什么是RFC,如何得到")。下载文件,可以使用CFTPclient的MoveFile方法,它也演示了真正的FTP命令的语法。
    
    操作系统: windows/98/nt/2000/
    
    编程工具: VC++5.0/6.0
    
    问题: 0)我也详细阅读了问专家中的QA001914 "在VC++5.0中如何执行FTP的命令"QA003709 "执行FTP命令总是返回500"QA002804 "什么是RFC,如何得到"等资料,
    1)我同样以QA003709 "执行FTP命令总是返回500",使用MovFile从客户端取回一个文件,但我无法同时得到多个文件,我企图写成如下语句都通不过:另外根据解读在 http://codeguru.earthweb.com/internet/ftpclient.shtml上下载的那个demo project发现这个MoveFile 函数本质是使用了RETR 和STOR命令。我也使用过函数FTPcommand()执行过RETR,能够成功上传/下载单个文件,但无法实现多文件传输。
    2)我的问题是:如何在VC++6.0中如何执行FTP的命令RETR/STOR进行多个文件上传/下载?最好能提供上传/下载的两个例句。
    3)QA003709 "执行FTP命令总是返回500""中提到:“get、 mget都 不 是 FTP指 令 ”但是很多网站都在介绍FTP中的get、mget 命令。这是怎么回事,就是说二者区别何在?
    4)如何在vc++6.0中用mget/mput命令实现多个文件的上传/下载? 如果能,2)中提到的方法有无优劣之分?
    5)请问要彻底搞清以上2,3,4问题需看那方面的资料?
    答:这里先解释为什么说“get、 mget都 不 是 FTP指 令 ”。Win9x/NT下有一个FTP.EXE程序,如果你运行这个程序,它会提供一个简单的命令行方式进行FTP传输(Unix下也有类似的命令)。在这个FTP程序中,可以使用get、mget等命令,但是这只是FTP程序中的命令,不是真正进行传输时使用的命令。FTP程序会自动将这种指令转换为RETR这样的指令,并传递给服务器。要了解真正的和服务器之间通信所使用的指令,需要阅读我说的RFC959。FTP协议中没有一次传递多个文件的命令,所以你需要顺序地多次调用MoveFile函数来实现。MoveFile函数可以上传和下载,你仔细阅读一下就可以了。另外,如果想直观地学习FTP命令,可以运行CuteFTP等软件,它们的窗口中都会显示每次操作的FTP命令和服务器返回的结果。

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio