![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Почему при загрузке больших файлов с FTP-сервера в Delphi XE7 с помощью Indy 10 может возникать ошибка EIdReadTimeout и как ее решить?Delphi , Интернет и Сети , FTPПри работе с FTP-сервером в Delphi XE7 с помощью компонента Indy 10 может возникнуть ошибка EIdReadTimeout, когда происходит загрузка больших файлов. Эта ошибка связана с тем, что FTP-протокол использует несколько TCP/IP-соединений: одно для основного соединения команд/ответов и отдельные соединения для передачи данных. Во время передачи данных основное соединение команд/ответов остается неактивным. Если вы проходите через маршрутизатор/firewall, который не осведомлен о FTP, основное соединение команд/ответов, скорее всего, будет закрыто, если оно останется неактивным слишком долго во время большой передачи. Соединение, как правило, не закрывается "грациозно", поэтому даже операционная система не знает, что соединение пропало. Когда TIdFTP пытается прочитать ответ на передачу, который никогда не придет, он превышает время ожидания. Чтобы учесть это, используйте свойство TIdFTP.NATKeepAlive для включения TCP/IP-уровневых keep-alives на основном соединении команд во время передач. Установите NATKeepAlive.UseKeepAlive в True, и установите NATKeepAlive.IdleTimeMS (время простоя перед отправкой keep-alives) и NATKeepAlive.IntervalMS (интервал между каждым keepalive) в подходящие значения. Обратите внимание, что свойства IdleTimeMS и IntervalMS на данный момент реализованы только для Windows 2000+, Linux и BSD. На других платформах используются большие значения по умолчанию, предоставляемые операционной системой. Если вам нужно настроить значения на этих платформах, вы можете использовать события TIdFTP.OnDataChannelCreate и TIdFTP.OnDataChannelDestroy для вызова TIdFTP.Socket.Binding.SetSocketOption() напрямую по мере необходимости. Пример кода для настройки свойства NATKeepAlive:
После настройки свойства NATKeepAlive ошибка EIdReadTimeout при загрузке больших файлов с FTP-сервера должна больше не возникать. Если у вас все еще есть проблемы с закрытием соединения, вам может потребоваться настроить другие свойства или проверить настройки сервера. При использовании компонента Indy 10 в Delphi XE7 для работы с FTP-сервером может возникнуть ошибка EIdReadTimeout при загрузке больших файлов из-за неправильной работы основного соединения команд/ответов через неосведомленные о FTP маршрутизато Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |