Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Обработка разрыва соединения IdTelnet (Indy)


Автор: imdb 6.4.2009, 10:00
Delphi 2005, Indy 10.1.5
При работе с компонетом IdTelnet при разрыве связи возникает ошибка 10054. Соответственно генерится исключительная ситуация и показывается диалоговое окошко с ошибкой, которое закрывается пользователем. Хотелось бы избавится от этого, чтобы все шло "молчком". Отсюда возникают вопросы:
1. Где можно отловить возникновение этой исключительной ситуации? Среди событий данного компонента так и не нашел. В данный момент спасаюсь подавлением исключительных ситуаций на глобальном уровне на уровне приложения.
2. Как в данном случае (в случае разрыва связи) продолжить работу с данным компонентом? Сейчас в случае разрыва связи любое обращение к компоненту IdTelnet приводит опять к возникновению исключительных ситации.

Заранее спасибо а помощь.

Автор: Matematik 7.4.2009, 01:32
1. обычным try 
в except проверять тип исключения
типа:
Код

try
{indy код}
except
  on E:Exception do
 begin
    if E is EIdException do
    begin
    {  indy исключения }
    end
    else
    begin
      rraise; { не indy }
    end
  end
end


2. Связь разорвана, соответственно писать/читать из сокета нельзя. В кранем случае можно прочесть оставшиеся данные из внутреннего стека indy.

Автор: imdb 10.4.2009, 10:13
Цитата(Matematik @  7.4.2009,  01:32 Найти цитируемый пост)
1. обычным try в except проверять тип исключениятипа:

Тут не совсем так все происходит. Все действия с компонентом IdTelnet я "обернул" в try...except, но есть еще сообщения, которые появляются только в отладчике.
Цитата(Matematik @  7.4.2009,  01:32 Найти цитируемый пост)
2. Связь разорвана, соответственно писать/читать из сокета нельзя. В кранем случае можно прочесть оставшиеся данные из внутреннего стека indy.

Тут о другом речь. Но я пока справился с проблемой.
Если еще возникнут вопросы - обязательно спрошу. Спасибо что откликнулись!

Автор: ArthurX 2.6.2009, 13:34
Я знаю 4 варианта разрыва соединения:

1. Сервер внезапно отвалился
2. Сервер закрыл соединение по команде клиента (exit, logout...)
3. Клиент принудительно разорвал соединение (IdTelnet.Disconnect)
4. Клиент принудительно отключил сокет (IdTelnet.Disconnectsocket)

Я, например делал так:

if (IdTelnet.Connected=True) and (Badpassword=True)
   then IdTelnet.Disconnectsocket;

При следующих коннектах никаких ошибок не появлялось, в отличие от IdTelnet.Disconnect ().
А в самой делфе EIdDisconnect всегда будет появляться, все-таки это исключительная ситуация, по хорошему мы должны выйти командой exit, logout, quit и т.д.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)