Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
ВнизIndy 10 и отлов ошибок Найти похожие ветки
← →
Pavel Kuznecov © (2007-03-29 09:17) [0]Всем привет!
Подскажите как отловить сообщения об ошибках в Indy(10) ?
Ситуация такая:
Передаю некоторую информацию поTIdTCPClient(IOHandler.Write)
с переодичностью 10сек.
Данные идут через Интернет(vpn). НО если разорвать соединение VPN, то всплывает ошибка "10054
Connection reset by peer"
***
В TcpClient я бы словил OnError и все., Но в Инди такого нету :(
Поможете?
Буду благодарен за любую помощь!
(BDS2006,Indy10,WinSer 2003)
← →
Сергей М. © (2007-03-29 09:50) [1]try .. except
← →
Pavel Kuznecov © (2007-03-29 09:54) [2]>>Сергей М. © (29.03.07 09:50) [1]
Спасибо.
Но поймать момент разрыва это не поможет.
>>ALL
Может знаете как все таки получить событие?
← →
Сергей М. © (2007-03-29 10:00) [3]
> поймать момент разрыва это не поможет
Чтой-то вдруг ?
И какого разрыва - программного или физического ?
← →
Pavel Kuznecov © (2007-03-29 10:07) [4]
tcp:TIdTCPCLient
...
function QueryPost(...):integer;
var
...
begin
try
//Отправка пакета
tcp.IOHandler.Write(1);
tcp.IOHandler.Write(1);
except
log("Error inQueryPost"); //В Memo
end;//except
end; //function
Если VPN соединение активно, посылает без проблем, если не активно, то даже в Log не пишет :(
Вот зачем так??? Иди я неправильно EXCEPT ставлю?
А разрыв - просто беру и отключаю соединеие (Разъединить) - своеобразный тест.
← →
Сергей М. © (2007-03-29 10:24) [5]
> даже в Log не пишет
А отладчик на что ?
← →
Pavel Kuznecov © (2007-03-29 10:41) [6]Хм...
!!!Разобрался. :)
Спасибо!
***
В юнит: IOHandlerSocket
В функцию: TIdIOHandlerSocket.BindingAllocated
поставил просто try-except
вот и все!
← →
Сергей М. © (2007-03-29 10:46) [7]Типа нашел ошибку разработчика ?)
← →
Pavel Kuznecov © (2007-03-29 11:07) [8]Скажете тоже :)
я читал про это "фишки", мол это сделано для надежности.
***
Конечно, на главный вопрос ответа я не нашел :(
"поймать момент разрыва"
Может есть у кого свежие идеи?
← →
Сергей М. © (2007-03-29 11:11) [9]
> Pavel Kuznecov © (29.03.07 11:07) [8]
Что ты понимаешь под "ловлей момента разрыва" ?
Инди-транспорт - синхронный !
← →
Pavel Kuznecov © (2007-03-29 11:54) [10]Есть соединение - TCP.
Если обрубить кабель между двумя точками, то этого соединения не будет.
когда обрубили кабель? Я понимаю, что можно "ловить" на не посредственной передачи\приема данных. Но тогда теряется время. т.е. если б я заранее знал, что кабель обрубили, я бы грубо говоря сделал коннект\реконнект + приостановил процесс передачи\приема.
**
в запасе есь вариант пинга каждые n секунд. НО ВСЕ ТАКИ...
← →
Сергей М. © (2007-03-29 12:02) [11]
> Я понимаю, что можно "ловить" на не посредственной передачи\приема
> данных
В синхронном режиме никаких иных способов не существует.
> если б я заранее знал, что кабель обрубили, я бы грубо говоря
> сделал коннект\реконнект + приостановил процесс передачи\приема
Ну и в чем проблема ?
try
СинхронныйМетодПередачи
except
Дисконнект
Реконнект
end;
← →
Pavel Kuznecov © (2007-03-29 12:05) [12]т.е. вы не знаете как установить момент разрыва?
я просто видел как это делает другая программа(моментально срабатывает как только я разъеденяю), причем в этот момент я ею не пользуюсь. т.е. данных сам не получаю и не принимаю.
← →
umbra © (2007-03-29 12:06) [13]
> в запасе есь вариант пинга каждые n секунд
зачем это надо? на операции записи в сокет Вы получили исключение - значит, связь оборвалась в промежутке между двумя попытками записи. В этот момент и надо делать дисконнект\коннект и продолжать запись (ну, или начинать заново, смотря что за данные).
← →
Сергей М. © (2007-03-29 12:09) [14]
> моментально срабатывает как только я разъеденяю
Кого и как разъединяешь-то ?
Разъединить ведь можно по-разному - можно программно закрыть соединение, а можно и тяпнуть топориком по сетевому кабелю...
← →
Сергей М. © (2007-03-29 12:12) [15]
> вы не знаете как установить момент разрыва?
Знаю.
Единственный правильный способ - получить исключение в момент выполнения метода приема/передачи и проанализировать причину исключения для принятия дальнейшего решения
← →
Pavel Kuznecov © (2007-03-29 12:22) [16]а давайте предположим:
программа посылает пакет с переодичностью в 60 минут.
ПЕРЕсоединение требует 20 минут(там, коннект, авторизация итд).
Я просто спрашиваю, можно ли узнать когда соединение было потеряно? Как оно потерялось, топором, программно - без разницы.
***
Немного выше я упомянул программу, которая решают мою задачу(без проблем ловит).
Но оказывается далеко ходить не надо - посмотрите на ярлык состояния соединения с локальной сетью. Выньте кабель на пол секунды, вы сразу увидите о потерянном соединении.
КАК?
← →
Сергей М. © (2007-03-29 12:57) [17]
> Выньте кабель на пол секунды, вы сразу увидите о потерянном
> соединении.
> КАК?
Ну все в одну кучу - и мухи, и котлеты)
Инди-то тут причем ?
И на какой стороне ты "вынимаешь кабель" - на своей или на стороне партнера ? Это в ряде случаев очень важно !
← →
Pavel Kuznecov © (2007-03-29 13:22) [18]на счет мух: ну это ж пример. просто пример.
На счет Инди: Ну делаю я чрез Инди. Нужно словить обрыв.
На счет с какой стороны: да без разницы. представьте, что соединение прямое PC-PC.
← →
Сергей М. © (2007-03-29 13:32) [19]
> На счет с какой стороны: да без разницы
Тебе так только кажется. Разница есть и весьма ощутимая.
> соединение прямое PC-PC
Это только частный случай.
> Ну делаю я чрез Инди. Нужно словить обрыв
Сказка про белого бычка)
Обрыв, еще раз повторяю, вполне может произойти на стороне партнера, и никаких извещений об этом обрыве ты не получишь - спасет только ловля исключения при выполнении приема/передачи. И это и есть универсальный способ определения разрыва соединения по любым причинам.
← →
Anatoly Podgoretsky © (2007-03-29 23:04) [20]> Pavel Kuznecov (29.03.2007 11:54:10) [10]
Момент разрыва не является ошибкой.
Ошибкой является не получения отклика от сервера
← →
Anatoly Podgoretsky © (2007-03-29 23:06) [21]> Pavel Kuznecov (29.03.2007 12:22:16) [16]
А теперь вытащи кабель после энного маршрутизатора.
То что ты пишешь является функцией сетевой платы и срабатывает только на кабель присоединеный к ней
← →
Anatoly Podgoretsky © (2007-03-29 23:07) [22]> Pavel Kuznecov (29.03.2007 13:22:18) [18]
Как это без разницы?
Шутишь?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.04 c