Пинг компьютера подключенного через маршрутизатор

Shouldercannon

Well-Known Member
25.05.2010
128
0
#1
Собственно как это сделать? Данный способ не работает.
Код:
IdIcmpClient1.Host := '192.168.0.1'; // Без порта и с портом не определяет
IdIcmpClient1.Ping;
Memo1.Lines.Add('Время до хоста: ' + IntToStr(IdIcmpClient1.ReplyStatus.MsRoundTripTime) + ' ms ' + ComboBox1.Text);
 

sinkopa

Well-Known Member
17.06.2009
344
9
#2
Собственно как это сделать? Данный способ не работает.
Код:
IdIcmpClient1.Host := '192.168.0.1'; // Без порта и с портом не определяет
IdIcmpClient1.Ping;
Memo1.Lines.Add('Время до хоста: ' + IntToStr(IdIcmpClient1.ReplyStatus.MsRoundTripTime) + ' ms ' + ComboBox1.Text);
:)
http://www.eomy.net/forum/ping-sredstvami-delphi-vt2290.html
unit Ping;
...
 

Shouldercannon

Well-Known Member
25.05.2010
128
0
#3
Ни один из способов не работает. Маршрутизатор портит всю картину. Может я рою не в ту сторону, может вообще ненадо зацикливаться на пингующих компонентах. Я опрашиваю через UDPClient сервера, может через него можно определить пинг при помощи вычислений (полученное значение - начальное = нужное значение)? Беда просто.
 

sinkopa

Well-Known Member
17.06.2009
344
9
#4
Ни один из способов не работает.
Как так "не работает"? :)
У меня работает, проверил специально...
Маршрутизатор портит всю картину.
Маршрутизатор "портить" не может ничего... его дело "поросяче" - взял пакет и "пнул" куда велено было...
Портить могут фаервол и прокси (если есть таковые)...
Вы из консоли проверяли команду ping к какому нибудь из ваших серверов? работает?
Может я рою не в ту сторону, может вообще ненадо зацикливаться на пингующих компонентах.
Боюсь что (если Вам действительно необходимо узнать время "запрос+отклик") другого пути кроме как "пропинговать" сервер у Вас нет...
Тут вопрос еще в том "хотят ли" сервера, чтобы их пинговали... :)
А вот нужен ли Вам именно ринг?
Например, если Вас устроит время между запросом Вашего UDPClient и моментом когда сервер "скажет" - "ПРИВЕТ! Ты кто?",
то сделать это действительно можно и без пинга.
Напимер так:
Код:
 var
Q,A: TTimeStamp;
implementation

//...

Q := DateTimeToTimeStamp(Now); // в обработчике запроса

//...
A := DateTimeToTimeStamp(Now); // в обработчике ответа сервера

//...
// там где надо "отчитаться" перед пользователем
ShowMessage('Я спросил... и мне ответили через ' + IntToStr(Trunc(TimeStampToMSecs(A) - TimeStampToMSecs(Q))) + ' мс.' );
Вот... но учтите, это ничего общего с ping не имеет... и время в основном зависит не от прохождения пакетов, а от того насколько быстро вам решит ответить сервер... а может у него есть клиенты и поважнее чем Вы... :)
 

Shouldercannon

Well-Known Member
25.05.2010
128
0
#5
Возможно стоит какая та защита, я забил на это и разрулил с помощью GetTickCount. Перед опросом получаю GetTickCount и при получении ответа получаю GetTickCount далее из второго вычитаю первое, вот и пинг.