执行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命令和服务器返回的结果。
此问题由李海回答。
| |
|
|
| |
|
|