IdFtp.List иногда генерирует ошибку сокета # 10054 - PullRequest
4 голосов
/ 28 марта 2012

Когда я вызываю функцию

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

, после того как я вошел в систему и изменил каталог ftp, я случайно получаю исключение сокета-ошибки # 10054 («Сброс соединения по одноранговому узлу»).

Когда я вызываю эту функцию, например, 20 раз подряд, я получаю это исключение 1 раз.

С этой проблемой я сталкиваюсь только в ОС Vista.

Кто-нибудь знает, в чем проблема иликак я могу избежать этого?

Ответы [ 3 ]

3 голосов
/ 29 марта 2012

Мало что вы можете с этим поделать, потому что отключение выполняется сервером FTP.У вас есть несколько вариантов:

  • Увеличить (или отключить) настройки тайм-аута (для каждого FTP-сервера свое имя) в настройках подключения к FTP-серверу.
  • Сообщите серверу, чтоВы живы, периодически отправляя команду NOOP (переключение в пассивный режим также может помочь).
  • Поймайте это исключение и снова подключитесь тихо (это мое предпочтительное решение, потому что у нас много FTP-серверов, и я не доверяюсистемные администраторы для изменения настроек тайм-аута FTP-сервера).

Вот снимок экрана из FileZilla настроек тайм-аута FTP-сервера:

enter image description here

Обратите внимание, что при указанных выше настройках FTP-клиент будет отключен через 2 минуты бездействия.
установка этого значения в 0 отключит тайм-аут.

2 голосов
/ 29 марта 2012

Протокол FTP использует несколько соединений сокетов.Каждый раз, когда вы звоните List(), устанавливается новое сокетное соединение для передачи запрошенных данных листинга.Похоже, что FTP-сервер не всегда правильно закрывает сокет в конце передачи.

0 голосов
/ 17 февраля 2016

В компоненте "IdFTP" измените следующие свойства:

  • "Passive" = "False"
  • "TransferType" = "ftASCII"
...