1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

Тема в разделе "Delphi - программирование", создана пользователем Shouldercannon, 24 май 2011.

  1. Shouldercannon

    Shouldercannon Well-Known Member

    Репутация:
    0
    Регистрация:
    25 май 2010
    Сообщения:
    127
    Симпатии:
    0
    Собственно как это сделать? Данный способ не работает.
    Код:
    IdIcmpClient1.Host := '192.168.0.1'; // Без порта и с портом не определяет
    IdIcmpClient1.Ping;
    Memo1.Lines.Add('Время до хоста: ' + IntToStr(IdIcmpClient1.ReplyStatus.MsRoundTripTime) + ' ms ' + ComboBox1.Text);
     
  2. sinkopa

    sinkopa Well-Known Member

    Репутация:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    :)
    http://www.eomy.net/forum/ping-sredstvami-delphi-vt2290.html
    unit Ping;
    ...
     
  3. Shouldercannon

    Shouldercannon Well-Known Member

    Репутация:
    0
    Регистрация:
    25 май 2010
    Сообщения:
    127
    Симпатии:
    0
    Ни один из способов не работает. Маршрутизатор портит всю картину. Может я рою не в ту сторону, может вообще ненадо зацикливаться на пингующих компонентах. Я опрашиваю через UDPClient сервера, может через него можно определить пинг при помощи вычислений (полученное значение - начальное = нужное значение)? Беда просто.
     
  4. sinkopa

    sinkopa Well-Known Member

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

    Shouldercannon Well-Known Member

    Репутация:
    0
    Регистрация:
    25 май 2010
    Сообщения:
    127
    Симпатии:
    0
    Возможно стоит какая та защита, я забил на это и разрулил с помощью GetTickCount. Перед опросом получаю GetTickCount и при получении ответа получаю GetTickCount далее из второго вычитаю первое, вот и пинг.
     
Загрузка...

Поделиться этой страницей