Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2015, 12:54   #1
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
Злость TIdIcmpClient ping

Всем Привет!

тема заезжанная но тем не менее, код
Код:
   Result := True;
   hoost := 'bla-bla-bla';
   try
     dIcmp1 := TIdIcmpClient.Create(Self);
     dIcmp1.Host := hoost;
     try
       dIcmp1.Ping();
     except
       Result := False;
       Exit;
     end;
   finally
     dIcmp1.Free;
   end;
1. ругается что dIcmp1 не инициализирован
2. всегда возвращает истину

помогите разобраться
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 28.08.2015, 13:00   #2
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
помогите разобраться
Что значит hoost := 'bla-bla-bla'; в месте эту "бла" если будет mail.ru или какой то сайт . Что вы хотите получить ? IP и порт ?

Последний раз редактировалось xxbesoxx; 28.08.2015 в 13:04.
xxbesoxx вне форума Ответить с цитированием
Старый 28.08.2015, 13:13   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ругается что dIcmp1 не инициализирован
Скрин ругани в студию
Цитата:
всегда возвращает истину
Ну значит Пинг идет норм.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.08.2015, 13:53   #4
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от xxbesoxx Посмотреть сообщение
Что значит hoost := 'bla-bla-bla'; в месте эту "бла" если будет mail.ru или какой то сайт . Что вы хотите получить ? IP и порт ?
хост написал от балды...
реально стоит АйПи в локалке который неактивен (с командной строки не пингуется). Я привел тело ф-ции которая должна вовращать истину при пинге и фальш при отсутствии пинга
В данном случае я должен получить ложь, а получаю истину

Цитата:
Сообщение от Stilet Посмотреть сообщение
Скрин ругани в студию

Ну значит Пинг идет норм.
как раз так и НЕ пингуется, АйПи не активен 100%

скрин в студии
Изображения
Тип файла: jpg warning.jpg (38.5 Кб, 300 просмотров)
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 28.08.2015, 14:18   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так то не ошибка, а warning?
Цитата:
как раз так и НЕ пингуется
Значит неправильно ты компонент используешь.
После пинга анализируй свойство ReplyStatus. У него есть поле BytesReceived. Если оно не ноль - значит пинг есть.
Код:
 Result := True;
   hoost := 'bla-bla-bla';
   
    with TIdIcmpClient.Create(Self) do begin
     Host := hoost;
     Ping('123');
     case ReplyStatus.BytesRecieved of
      3: Result:=true; //100% пинг
      0: Result:=false; // Нет связи
      else Result:=false; //Пинг есть, но с потерями
     end;
     Free;
   end;
Вот как-то так, есля я правильно помню.
I'm learning to live...

Последний раз редактировалось Stilet; 28.08.2015 в 14:21.
Stilet вне форума Ответить с цитированием
Старый 28.08.2015, 15:01   #6
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
которая должна вовращать истину при пинге и фальш при отсутствии пинга
В данном случае я должен получить ложь, а получаю истину
1) скачаем библиотеку (ICS) http://www.magsys.co.uk/delphi/magics.asp
2) и от него нужно только компонент Ping1
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Edit1.Text = '' then
    begin
      Beep();
      MessageDlg('Пишите  hoost пожалуйста', mtError,[mbOK],0);
      if Edit1.CanFocus then
      Edit1.SetFocus;
      Abort;
    end
     else
    if Edit2.Text = '' then
    begin
      Beep();
      MessageDlg('Размер пакетов не задано ', mtError,[mbOK],0);
      if Edit2.CanFocus then
      Edit2.SetFocus;
      Abort;
    end
    else
    Memo1.Lines.Add('Поиск ''' + Edit1.Text + '''');
    Ping1.Size := StrToInt(Edit2.Text);
    Ping1.DnsLookup(Edit1.Text);
end;

procedure TForm1.Ping1DnsLookupDone(Sender: TObject; Error: Word);
begin
 // Если произошла ошибка, то...
  if Error <> 0 then
  begin
    // Вывести сообщение об ошибке
    Memo1.Lines.Add('Хост не найден ''' + Edit1.Text + '''');
    // Выход
    Exit;
  end;
  // Если ошибок не было, то выводим в RichEdit1 результат поиска
  Memo1.Lines.Add('Хост ''' + Edit1.Text + ''' - ' + Ping1.DnsResult);
  // Устанавливаем //свойство Address компонента или хост Ping равным адресу, найденному в базе DNS
  Ping1.Address := Ping1.DnsResult;
  // Запускаем Ping
  Ping1.Ping;
end;

procedure TForm1.Ping1EchoReply(Sender, Icmp: TObject; Status: Integer);
begin
  if Error <> 0 then
    Memo1.Lines.Add('Не могу выполнить операцию ping: ' + Ping1.ErrorString)
  else
    Memo1.Lines.Add('Получено ' + intToStr(Ping1.Reply.DataSize) + ' байт от ' +
      Ping1.HostIP + ' за ' + intToStr(Ping1.Reply.RTT) + ' миллисекунд');
end;

procedure TForm1.Ping1EchoRequest(Sender, Icmp: TObject);
begin
    Memo1.Lines.Add('Посылка' + intToStr(Ping1.Size) + ' байтов на ' +
    Ping1.Hostname);
end;

end.
Изображения
Тип файла: jpg Ping___.jpg (122.3 Кб, 133 просмотров)
Тип файла: jpg Ping___2.jpg (121.4 Кб, 129 просмотров)

Последний раз редактировалось xxbesoxx; 28.08.2015 в 15:22.
xxbesoxx вне форума Ответить с цитированием
Старый 28.08.2015, 15:47   #7
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

xxbesoxx сторонний компонент не канает т.к. "трудно" будет обернуть в поток, хочется одной функцией, но спасибо за ответ, в свободное время обязательно попробую

Stilet ваш пример
Код:
   Result := True;
 with TIdIcmpClient.Create(Self) do begin
     Host := hoost;
     Ping();
     case ReplyStatus.BytesReceived of
      //3: Result:=true; //100% пинг
      0: Result:=false; // Нет связи
      //else Result:=false; //Пинг есть, но с потерями
     end;
     Free;
   end;
работает но когда кидаю ф-цию в поток (точнее создаю 255 потоков которые используют ОДНУ функцию) на сканирование всей ветки (192.168.111.1-255) возвращает всегда истину... если по одному - все работает корректно Причем, если, к примеру, сканировать три адреса где первые 2 активные, а 3й нет то все работает, а если 1й и 3й активный, а 2й нет то результат выдает что все ТРИ активные

почему так?
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 28.08.2015, 15:54   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А покажи код пинга упакованный в поток. Как ты это сделал?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.08.2015, 17:27   #9
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А покажи код пинга упакованный в поток. Как ты это сделал?
на работе, с собой не брал, но если в двух словах то:
1. есть просто масив с адресами
2. есть один поток в котором вызивается выше указаная функция
3. через цыкл запускается поток N-е кол-во раз
вот и весь код

если запускать поток один раз то коректно возвращает результат (истина или ложь)
через поток (цикл который запускает 5 раз один и тот же поток) все время истина, хотя есть неактивные адреса
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!

Последний раз редактировалось spirit-ua; 28.08.2015 в 17:29.
spirit-ua вне форума Ответить с цитированием
Старый 28.08.2015, 17:43   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну извини. Телепатор сегодня спит
Утром код - днем решения. Днем код - вечером решения
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[ping] unbanned Работа с сетью в Delphi 6 09.07.2013 14:06
Ping Шамиль8284 Софт 1 27.05.2013 13:28
Indy10 TIdICMPClient - некорректное время пинга holy_0dmin Работа с сетью в Delphi 2 25.04.2013 17:39
ping на c++ маришка001 Помощь студентам 3 30.10.2011 11:51
ping TaTT DoGG Общие вопросы .NET 2 06.10.2008 12:48