-
Добрый день столкнулся с тем, что во время работы IDFtp при попытке скачиания\закачивания файла приложение зависает, приэтом скачивание\закачивание даже не начинается, скажу сразу если перезапустить приложение то есть шанс дальнейшей работы. Проблема в том что встроенные таймоуты не срабатывают, использую BDS2006+Indy10. Процедура простейшая:
FTp.Connect;
ftp.ChangeDir(<dir>);
if ftp.filesize(<file>)>-1 then
Ftp.get(<file>,<file>,true);
ftp.disconnect;
</
Проблема с тем, что приложение намертво зависает,при этом не дает никакой ошибки, время простоя более 5 часов, несмотря на точто все таймоуты настроены не больше 1минуты.
Программа не многопотоковая, пытался найти такие проблемы- проблемы такие есть, но решений нет. Единственный вариант - это написание многопотокого приложения, к сожалению это не выход, как бороться с таким поведение Indy???
-
Ты уже выяснил, какая конкретно строчка этого кода приводит к вису ? Нет ? Иди выясняй) Как выяснишь, так и добро пожаловать, так сразу и разговор предметный будет. А пока все это - не более чем стук в подвале)
-
> как бороться с таким поведение Indy
Я просто отказался от него в пользу WinInet. Была у меня служба которая отсылала - принимала файлы с(на) ФТП на инди. Могла дн три работать, а могла и час не осилить. Переписав на WinInet сейчас месяцами работает и не отваливает. Про нее забыли даже все :)
-
Может тогда поделишься кодом для скачивани\закачивания с фтп при помощи WinInet. Сергей отличный ответ !!! я знаю в каком месте зависает инди, вот в этом: Ftp.get(<file>,<file>,true); Во время скачивания похоже теряются пакеты, канал 128-256кб, иногда работает иногда зависает на моменте скачивани\закачивания.
-
> neorad (01.07.09 07:37) [3]
> я знаю в каком месте
А я не знаю).. И , по-твоему, я должен догадаться, где у тебя стук)
Ну а как насчет этого (цитата из станд.справки)
Set values in the ReadTimeout and TransferTimeout properties prior to calling the Connect or Login methods, and before using method that perform file transfer or directory listing operations
?
Соблюдаешь ? Или я опять должен догадаться, в какой момент и какие значения этих свойств ты устанавливаешь ?
-
> Может тогда поделишься кодом для скачивани\закачивания с > фтп при помощи WinInet.
кода тут и так много, на 5 минут поиска. А если желаешь продукт конечный, то милости просим в АСЮ или Мыло, но с енотами и ТЗ
ЗЫ Гранит науки очень крепок, но он победим...
-
свойство Passive может помочь
-
Вряд ли есть зависание, налицо только не понимание принципов работы Инди. Надо больше ждать, а еще лучше ввести простенький прогресс бар, что бы таких дурных мыслей не возникало. А еще лучше перейти на ICS/WinInet
-
:) Не прошло и года...
-
Наглухо подвисает при отправке на ftp больших файлов. стоит Turbo Delphi, без обновления инди. сотни кб отправляет на ура, пачками :) Ну а 20мб - висяк. Формы нету. Консоль. Как победить зверя, кто в курсе?
-
лучше перейти на ICS/WinInet
-
Анатолий, а можно вкратце услышать - чем ICS/WinInet лучше чем Indy?
-
> Cobalt (08.06.2012 13:42:11) [11]
1. ICS ассинхронные + синхронные методы работы, потоки не требуются 2. WinInеt системная библиотека Виндоус, через нее работает Интернет Explorer еще можно упомянуть Synapse, который индетичен Инди, но с меньшим количеством ошибок и проще. 3. Инди кривая система, трудно добиться желаемого, чуть в более сложном случае, монстр
-
> можно вкратце услышать - чем ICS/WinInet лучше чем Indy?
1. У индейцев был касяк с корректным "закрытием" сокета при обрыве канала. 2. Столкнулся с неправильным отображением времени в заголовке сообщения (возможно сейчас исправили)
-
> 1. У индейцев был касяк с корректным "закрытием" сокета при обрыве канала. Это если кабель вытащить во время передачи данных? А как проявлялся? утечка памяти, АВ, или сбой логики?
-
> Это если кабель вытащить во время передачи данных? А как > проявлялся? утечка памяти, АВ, или сбой логики?
вроде того, но кабель не вытаскивали, а либо нэт упал, либо сервак вдруг перестал откликаться... проявлялся так: висит дня три, а потом "не могу открыть сокет" или что-то подобное, и так любой софт, пока винду не перебутаешь...
З.Ы. Это давно было, может уже поправили, но перерисовав на WinInet, можно было забыть что она там висит и работает
|