Форум: "Сети";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
ВнизidUDPClient - проверка перед отправкой - как? Найти похожие ветки
← →
Grundic © (2004-10-21 21:38) [0]При отсутствии связи с внешним миром функция IdUDPClient.Send() вызывает ошибку.
Посоветуйте - как проверять наличие связи или просто эту ошибку задвинуть?
Важно быстродействие проверки - ф-ция вызывается довольно часто.
← →
Grundic © (2004-10-22 11:33) [1]Все так плохо? :)
← →
Reindeer Moss Eater © (2004-10-22 11:49) [2]Все даже намного хуже.
← →
Reindeer Moss Eater © (2004-10-22 11:57) [3]Представь, что ты с частотой X проверяешь наличие связи.
А в это время я с этой же частотой включаю/выключаю канал.
Но только в противофазе с тобой.
Ты проверяешь - я выключаю. Ты заканчиваешь проверять - я включаю.
Если бы я продолжал свое безобразие, а ты перестал проверять, а занялся бы делом без проверки (сменив фазу), то все бы твои данные благополучно достигли адресата.
← →
Grundic © (2004-10-22 13:06) [4]Проблема не в периодическом выключении канала (хотя решение задачи при заданных условиях красиво :), а в том, что хитрый юзер может "случайно" выдернуть ненадолго кабель.
Я пишу программу (для домена), которая запускается в начале сеанса, выполняет Self.Hide и так и висит невидимой, показывая мне действия юзера. А вот кодгда юзер злобно выдергивает кабелек - прога вызывает ошибку, зависает, и "гордо паказывает юзеру, что она вообще существует, как её звать и что он больше не будет ему мешать..." :).
Вот такая проблема. :/
← →
Reindeer Moss Eater © (2004-10-22 13:15) [5]Ты так и не понял про что я тебе рассказывал сказку.
← →
Reindeer Moss Eater © (2004-10-22 13:18) [6]Вот такая проблема. :/
Стоит ли браться за удаленное администрирование, если ничего не слышал про обработку исключительных ситуаций?
Может лучше "Hello World" ?
← →
Grundic © (2004-10-22 13:44) [7]В "сказке", если я ПРАВИЛЬНО понял ты продемонстрировал ситуацию с переодически исчезающим каналом. С этим действительно можно бороться посылая пакеты с рандомным временным интервалом - тогда один из них пролетит с некоторой высокой вероятностью.
Мне важно другое - не "пролет" пакета сквозь временную "решетку" связи, а отсутствие "брызг при ударе об эту самую решетку".
Во как. :)
← →
Reindeer Moss Eater © (2004-10-22 14:22) [8]если я ПРАВИЛЬНО понял
Неправильно.
Смысл вот в чем:
Работоспособность канала во время проверки - это одно.
А его работоспособность после проверки - это совсем другое.
Это все равно, что зная, что в магазине частенько не бывает пива ты приходишь в этом магазин проверить, а есть ли там пиво (но не берешь с собой кошелька).
И если пиво есть, возвращаешься домой за кошельком и идешь в магазин снова.
← →
Digitman © (2004-10-22 14:44) [9]
> Grundic
понимаешь ли, т.н. "наличие связи" определяется отнюдь не только "воткнутостью" коннектора сет.кабеля куда-то там
на маршруте следования пакетов, отправляемых твоим хостом, у одного из маршрутизаторов где-то в недрах Инета может случиться понос .. твой пакет может и не дойти до адресата, однако это не означает, что "связи нет" - у тебя есть нормальная связь с твоим провайдером, и он по-прежнему исправно пытается транслировать твои пакеты
← →
Grundic © (2004-10-22 15:01) [10]
> Digitman
Согласен. Но мне, как уже было выше сказано, не важна (почти) доходимость пакета до сервака. Важно наличие "свободного выхода" пакета из локалки.
> Reindeer Moss Eater
Понял. :) Да, согласен. Но (у меня лично) разница во времени между проверкой и отправлением очень незначительна.
"В наш век нанотехнологий туалетная бумага имеет длянну 54 +- 0.5 м!"
Программулина не "отцовская", и даже не претендует. Просто проба пера...
Сделал следующее (спасибо Дмитрию Ботвину за подсказку):
function RouteToHost(HostName:String):Boolean;
var
wsadt : wsadata;
Destino :in_addr;
Host :PHostEnt;
begin
WSAStartup($0101,wsadt);
Destino.S_addr := inet_addr(Pchar(HostName));
if (Destino.S_addr = 0) then
begin
Host := GetHostbyName(PChar(HostName));
end
else
begin
Host := GetHostbyAddr(@Destino,sizeof(in_addr), AF_INET);
end;
WSACleanup();
Result:=(host <> nil);
end;
Основана на тупой попытке получить "имя" хоста. Взял потому, что она не вызывает ошибок. НЕ СРАБОТАЛА пробиваясь к моему линуховому роутеру, СРАБОТАЛА пробиваясь к Виндовому серваку.
Ногами не бить! :) Она меня просто устроила, никому не навязываю.
← →
Grundic © (2004-10-22 16:48) [11]Флейм, оффтоп:
> Reindeer Moss Eater © (22.10.04 13:18) [6]
> Стоит ли браться за удаленное администрирование, если ничего
> не слышал про обработку исключительных ситуаций
Поддерживая свою гордую гордость :) : про обработку исключительных ситуаций (в данном случае - это больше "защита от дурака") я слышал и даже убил на это дело приличное кол-во времени, превышающее время разработки самих продуктов. А сейчас это не делаю, ибо не нужно и влом... :)
← →
XProger © (2004-10-23 04:49) [12]Кидаешь на форму TApplicationEvents и самомтоятельно обрабатываешь событие onException...
Если пишешь без VCL то:
uses
SysUtils;
...
try
<опасный код>
except
end;
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.031 c