Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.05.29;
Скачать: [xml.tar.bz2];

Вниз

Indy idFTP - как определить, что соединение разорвано?   Найти похожие ветки 

 
Puzzle   (2003-03-26 18:43) [0]

Использую Indy9 компонент TidFTP.
Как определить, что связь разорвана по таймауту сервером или по
какой-либо другой причине?
Свойство TidFTP.Connected возвращает True, даже когда связи уже нет.
CheckForDisconnect не использую, т.к. при вызове Connected эта процедура там используется.
Событие OnStatus не срабатывает при обрыве соединения.
Метод Status также ничего полезного не делает.

На первый взгляд кажется, что проблема проста, но...


 
Zelius   (2003-03-26 21:58) [1]

А ты присваиваешь ReadTimeout? Если нет, то это означает анлимитед ожидание и в некторых случаях виснет надолго, если не на всегда!


 
Shuric   (2003-03-27 00:21) [2]

Иногда полезно послать мусор и посмотреть сколько действительно отправлено ;)


 
Puzzle   (2003-03-28 14:00) [3]

Я что-то не совсем доехал как юзать ReadTimeout. Если не трудно, расскажите на пальцах, по-русски, как хотите, главное чтобы понятно было.


 
$hade   (2003-03-28 15:48) [4]

Я что-то не совсем доехал как юзать ReadTimeout
ReadTimeout :=10000
try
ReadBuffer(b,5)
except
on e:EIdReadTimeOut{вроде так оно называется} do
begin
{тут делаещ что-либо при таймауте}
end;
end;
работает оч просто: Indy - блокирующие сокеты - то есть выполнение проги на строке ReadBuffer(b,5) остановится и сокет будет ждать до тех пор пока не прийдут 5 байт данных....или
не пройдет 10 секунед (таймаут) и тогда пройсходит исключение EIdReadTimeOut...


 
Puzzle   (2003-03-28 16:46) [5]

понятно, попробую, если что черкну
спасибо


 
Puzzle   (2003-03-31 13:22) [6]

> $hade, есть вопрос. Делаю, как ты посоветовал, т.е. таймеру, у которого интервал 5 сек, на событие OnTimer вписао следующий код:

procedure TfmMain.TimerEventTimer(Sender: TObject);
var B: array [1..3] of Char;
begin
if FTP.Connected then try
FTP.ReadBuffer(b, 1);
except
meLog.Lines.Add("НЕТ СОЕДИНЕНИЯ");
end;
end;


у idFTP выставил ReadTimeout=10000.
Но происходит следующее: после того, как я жду 5 минут, а потом делаю какое-либо действие (например RetrieveCurrentDir), то сообщение "НЕТ СОЕДИНЕНИЯ" появляется раз 10. Почему так происходит?
Может быть ReadBuffer надо не по таймеру делать? Тогда где и как?


 
$hade   (2003-03-31 16:04) [7]

хбз...под конец рабочего дня я уже с трудом соображаю...
для начала сделай так:

var B: array [1..3] of Char;
begin
Timer.Enabled:=false; <<<<<<
if FTP.Connected then try
FTP.ReadBuffer(b, 1);
except
meLog.Lines.Add("НЕТ СОЕДИНЕНИЯ");
end;
Timer.Enabled:=true; <<<<<<
end;

2: после того, как я жду 5 минут
или секунд? в твоем случае каждые 10 секунд будет выдоваться
"нет соединения" хотя на самом деле это "таймаут чтения"
3: сообщение "НЕТ СОЕДИНЕНИЯ" появляется раз 10
еще раз - "нет соединения" будет выводиться при ЛЮБОЙ ошибке
в блоке между try/except
4:Может быть ReadBuffer надо не по таймеру делать?
лучше в отдельном потоке...



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.05.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.008 c
1-94835
qwerty2
2003-05-19 18:28
2003.05.29
DCOM


6-94981
Provodnick
2003-02-12 09:00
2003.05.29
Как узнать IP-адрес компьютера в ЛС.


1-94891
Sergey
2003-05-16 16:10
2003.05.29
Абсолютный путь к файлу


1-94906
Новичек
2003-05-16 21:02
2003.05.29
Тип PChar


14-95039
Namo
2003-05-07 17:07
2003.05.29
конкурс на лучший код ошибки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский