Ни один из способов не работает.
Как так "не работает"?
У меня работает, проверил специально...
Маршрутизатор портит всю картину.
Маршрутизатор "портить" не может ничего... его дело "поросяче" - взял пакет и "пнул" куда велено было...
Портить могут фаервол и прокси (если есть таковые)...
Вы из консоли проверяли команду
ping к какому нибудь из ваших серверов? работает?
Может я рою не в ту сторону, может вообще ненадо зацикливаться на пингующих компонентах.
Боюсь что (если Вам действительно необходимо узнать время "запрос+отклик") другого пути кроме как "пропинговать" сервер у Вас нет...
Тут вопрос еще в том "хотят ли" сервера, чтобы их пинговали...
Я опрашиваю через UDPClient
А вот нужен ли Вам именно
ринг?
Например, если Вас устроит время между запросом Вашего UDPClient и моментом когда сервер "скажет" - "ПРИВЕТ! Ты кто?",
то сделать это действительно можно и без пинга.
Напимер так:
Код:
var
Q,A: TTimeStamp;
implementation
//...
Q := DateTimeToTimeStamp(Now); // в обработчике запроса
//...
A := DateTimeToTimeStamp(Now); // в обработчике ответа сервера
//...
// там где надо "отчитаться" перед пользователем
ShowMessage('Я спросил... и мне ответили через ' + IntToStr(Trunc(TimeStampToMSecs(A) - TimeStampToMSecs(Q))) + ' мс.' );
Вот... но учтите, это ничего общего с ping не имеет... и время в основном зависит не от прохождения пакетов, а от того насколько быстро вам решит ответить сервер... а может у него есть клиенты и поважнее чем Вы...