4

当我调用函数时

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

之后我登录并更改了 ftp 目录,我偶尔会收到一个 socket-error #10054 异常(“Connection reset by peer.”)。

当我连续调用该函数例如 20 次时,我得到该异常 1 次。

我只在 Vista OS 上遇到过这个问题。

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

4

3 回答 3

3

您对此无能为力,因为断开连接是由 FTP 服务器完成的。你有几个选择:

  • 在您的 FTP 服务器连接设置中增加(或禁用)超时设置(每个 FTP 服务器都有不同的名称)。
  • 通过定期发送命令告诉服务器你还活着NOOP(切换到被动模式也有帮助)。
  • 捕获该异常并静默重新连接(这是我的首选解决方案,因为我们有许多 FTP 服务器,我不相信系统管理员会更改 FTP 服务器超时设置)。

这是FileZillaFTP 服务器超时设置的屏幕截图:

在此处输入图像描述

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

于 2012-03-28T23:27:18.850 回答
2

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

于 2012-03-28T20:24:04.993 回答
0

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

  • “被动”=“错误”
  • "TransferType" = "ftASCII"
于 2016-02-17T19:22:17.580 回答