Пишу программу (Lazarus 0.9.26 beta FPC 2.2.2, под XUbuntu) для работы с контроллером по TCP/IP. Использую компонент TLTCPComponent из INet.
Проблема: когда отключаю кабель от сетевого интерфейса (карты) не происходит ни OnDisconnect, ни OnError. Свойства Connected и Active остаются TRUE.
Хотел использовать TProcess и по таймеру пинговать контроллер, но он останавливается и около минуты ни каких ответов. А пока ответа от пинга не пришёл - не происходит даже OnTimer таймера. Читал ман на пинг. Использовал и -W и -i и еще всякого - ни чего не помогает. Прога висит. У меня случился ТУПИК! ПОМОГИТЕ добрым советом!...
Пинг, TProcess и TLTCPComponent как отследить разрыв связи
Модератор: Модераторы
есть 3-х звенка, была похожая проблема, решил путем посылки раз в 30 сек (настраиваемо) так называемых keepalive пакетов (т.е. пустой пакет в нем только признак что он для поддержки связи).
раньше бывало если связь разрывается а у сервера/клиента не возникало соответствуещего события, то теперь в таких случаях определяется разрыв с максимальным опозданием в 30 сек. т.к. при попытке посылки любого пакета (в данном случае keepalive) в потерянное соединение стало срабатывает событие.
раньше бывало если связь разрывается а у сервера/клиента не возникало соответствуещего события, то теперь в таких случаях определяется разрыв с максимальным опозданием в 30 сек. т.к. при попытке посылки любого пакета (в данном случае keepalive) в потерянное соединение стало срабатывает событие.
Спасибо за совет, но я выкрутился другим способом. Пакет от контроллера приходит раз в 0.3 сек. Я поставил таймер на сработку 0.4 сек. и ввел в проге переменную ILive: boolean. По по приходу пакета делаю ILive := TRUE, а по таймеру проверяю if (not ILive) then "процедура дисконнекта-коннекта" и в далее в любом случае ILive := FALSE. Вот и всё.
