Delphi7 IDFtp.List 运行出错

诸葛不亮2909 2018-10-30 11:32:04
procedure TForm1.Button1Click(Sender: TObject);
var
tr : Tstrings;
begin //连接
tr := TStringlist.Create;
IdFTP1.Host := 'xxx.xxx.xxx.xxx'; //FTP服务器地址
IdFTP1.Username := '111111'; //FTP服务器用户名
IdFTP1.Password := '111111'; //FTP服务器密码

IdFTP1.Connect(); //连接到ftp

Edit1.Text := IdFTP1.RetrieveCurrentDir;//得到初始目录

IdFTP1.ChangeDir('\'); //进入到client子目录

IdFTP1.List(tr); //得到client目录下所有文件列表 <--------------到这一行出错了


Memo1.Lines.Assign(TR);
tr.Free;
end;

上面代码编译是没问题的,但在运行时,可以检测到连接成功,执行到 IdFTP1.List(tr) 一行时出错,显示 invalid PORT command 错误。请问各路神仙什么原因?怎么解决?
...全文
368 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
诸葛不亮2909 2018-11-15
  • 打赏
  • 举报
回复
虽然没有找到原因,但非常感谢这一周辛苦对原因的查找。我一直以为是服务器的问题,今天在另外几台电脑上都试过也可以通过。看来只有我的电脑设置有问题。找了半天还是不行,就暂时不管他了。 非常感谢您的付出,50分的小小心意不值一提,但给了我很大信心,再次表示感谢!
  • 打赏
  • 举报
回复
看错误信息,应该是ftp server不支持列目录,这是ftp server软件可以配置的,如果有权限可以修改一下
用浏览器登录能列出来,你确定是用ftp协议登录的么,ftp://...这种?
BlueStorm 2018-11-14
  • 打赏
  • 举报
回复
把全部的360软件卸载掉试试看。 一个小问题居然花了一个多星期还没解决.
  • 打赏
  • 举报
回复
这个设置是开你自己电脑上IIS里的FTP Server功能,和你访问外网FTP Server无关,启用IIS有安全隐患,不是必须用的话最好还是关掉。
诸葛不亮2909 2018-11-14
  • 打赏
  • 举报
回复
我在别的电脑上试过了,用DOS 命令是可以正常使用的。看来这个情况不是FTP服务器的事,应该是我本地电脑的问题。 我在本地电脑的 “启用或关闭WINDWOS 功能”界面里也设置了 FTP(如下图),仍是不管用。 把我本地的防火墙、360安全等全退出,也不管用。真是不知什么原因。
BlueStorm 2018-11-13
  • 打赏
  • 举报
回复
或者设置为passive模式试试看: IdFTP1.Passive := True;
BlueStorm 2018-11-13
  • 打赏
  • 举报
回复
你可以换一台电脑试一下能不能用ftp.exe正常运行dir或ls命令
诸葛不亮2909 2018-11-13
  • 打赏
  • 举报
回复
我在服务器上也查了商品,应该是正常的 监听状态,应该是对的啊
诸葛不亮2909 2018-11-13
  • 打赏
  • 举报
回复
在DOS 的命令行里运行 FTP ,确实也出现了相同的错误。看来与D7 没有关系。

但在在浏览器里,登陆FTP服务器,是可以正常DOWNLOAD 文件的,是什么原因呢? 按里如果防火墙的话,应该是相同规则的啊。
BlueStorm 2018-11-07
  • 打赏
  • 举报
回复
那就写成 idFTP1.List(nil) 试试看
BlueStorm 2018-11-07
  • 打赏
  • 举报
回复
用ftp.exe登录ftp server后,运行一下ftp命令:dir
  • 打赏
  • 举报
回复
D7自带的是indy9,和高版本里的indy10差别比较大
BlueStorm 2018-11-07
  • 打赏
  • 举报
回复
先确保你的ftp server是能正常登录的: 在Windows的cmd里运行一下ftp.exe, 看看能不登录你的ftp server。 ftp.exe你应该会用吧?
诸葛不亮2909 2018-11-07
  • 打赏
  • 举报
回复
那就写成 idFTP1.List(nil) 同样报 invalid PORT command 这个错误。 代码如下图:


我在这行代码的上一行加了 message 提示,可以正常显示的,然后就报 “invalid PORT command”的错误了,后面就不执行了。
诸葛不亮2909 2018-11-06
  • 打赏
  • 举报
回复
我用的Delphi 7 的,如果这里写成 idFTP1.List ,没有参数的话,编译不通过,如下图。


D7 一定要让指定参数。麻烦看下,多谢!
BlueStorm 2018-11-05
  • 打赏
  • 举报
回复
我说的很多次了,不能写成idFTP1.List(tr),要写成idFTP1.List,而且不能把这行取消掉!!!!!!!!!!!!!!
诸葛不亮2909 2018-11-04
  • 打赏
  • 举报
回复
直接用WIN浏览器是可以FTP上去的,如下图:

我把这句dFTP1.List(tr) 注释掉,跳过不执行它,直接使用下面这句来DOWNLOAD已知的文件 'cxyshop.txt'这个文件。
IdFTP1.Get('cxyshop.txt','d:/FTPtest/cxyshop.txt',True,True); 也出现同样的错误,invalid PORT command 。

可否把这个测试程序打包给你,帮我检查下呢? 谢谢啦!!!
BlueStorm 2018-11-03
  • 打赏
  • 举报
回复
是IdFTP1.List; 或IdFTP1.List('*.*'); 不能写成IdFTP1.List(tr); tr是TString,IdFTP1.List没有这样的参数。; 另外idftp默认使用主动模式,这要求你的Windows防火墙允许你的程序通过防火墙,必须设置一下,你的报错信息估计就是这个原因。 如果你暂时不想设置防火墙,可以使用被动模式,在Connect前增加一行:FTP1.passive := True;
BlueStorm 2018-11-03
  • 打赏
  • 举报
回复
是IdFTP1.List; 或IdFTP1.List('*.*'); 不能写出IdFTP1.List(tr); tr是TString,IdFTP1.List没有这样的参数。;
BlueStorm 2018-11-03
  • 打赏
  • 举报
回复
那个提示很明显嘛,dFTP1.List其实就是dFTP1.List('', True), 不提供参数时有默认值。 代码应该是没有错的,错误应该在其他地方,你看一下用windows 的ftp能不能登录进去?
加载更多回复(3)

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧