IdFtp.List偶尔抛出socket错误#10054

时间:2012-03-28 13:12:35

标签: delphi ftp indy10

当我调用函数

IdFtp.List(myList, '', false);

之后我登录并更改了ftp目录,我得到了一个套接字错误#10054异常(“通过peer重置连接。”)。

当我呼叫该功能时,例如连续20次我得到1次异常。

我在Vista OS上遇到的那个问题。

有人知道问题是什么或我如何避免它?

3 个答案:

答案 0 :(得分:3)

您无法做到这一点,因为断开连接是由FTP服务器完成的。 你有几个选择:

  • 在FTP服务器连接设置上增加(或禁用)超时设置(每个FTP服务器都有不同的名称)。
  • 通过定期发送NOOP命令告诉服务器您还活着(切换到被动模式也可以提供帮助)。
  • 抓住该异常并以静默方式重新连接(这是我首选的解决方案,因为我们有很多FTP服务器,我不相信sys-admins更改FTP服务器超时设置)。

以下是FileZilla FTP服务器超时设置的屏幕截图:

enter image description here

请注意,使用上述设置后,FTP客户端将在非活动2分钟后断开连接 将该值设置为0将禁用超时。

答案 1 :(得分:2)

FTP协议使用多个套接字连接。每次调用List()时,都会建立新的套接字连接以传输请求的列表数据。听起来好像FTP服务器并不总是在传输结束时正确关闭套接字。

答案 2 :(得分:0)

在组件“IdFTP”中,更改以下属性:

  • “被动”=“假”
  • “TransferType”=“ftASCII”