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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2019, 20:38   #1
Alex711
Пользователь
 
Регистрация: 21.09.2018
Сообщений: 99
По умолчанию Ping компа в локалке

Здравствуйте, пытаюсь проверить доступность компов в локалке так:
Код:
begin  
  try
   IdIcmpClient1.Host:=('S01');
   IdIcmpClient1.Ping;
   ttl:=IdIcmpClient1.ReplyStatus.TimeToLive;
   if TTL>0 then  c2 := ('1');
   if TTL=0 then  c2 := ('0');
    except
   c2 := ('2');
end;
Если компы включены всё хорошо, если выключены программа висит по страшному, и чем больше выключенных компов, тем сильнее висит, подскажите пожалуйста что нибудь.
Заранее благодарю.
Alex711 вне форума Ответить с цитированием
Старый 11.04.2019, 06:20   #2
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Выставить Timeout, если есть или делать в потоке или использовать
Код:
Application.ProcessMessages
Shouldercannon вне форума Ответить с цитированием
Старый 11.04.2019, 09:14   #3
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Лучше это сделать в потоке, можно даже делать одновременный опрос несколько адресов.

Примерно так
Код:
  type
  TPingThread = class(TThread)
  private
   FIdIcmpClient: TIdIcmpClient;
   FC2: String;
   FIpAddr: string;
  Protected
   procedure Execute; Override;
  public
    constructor Create(Ip: string); virtual;
   procedure OnStop; virtual;
end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

constructor TPingThread.Create(Ip: string);
begin
  inherited Create(false);
  FreeOnTerminate := True;
  FIpAddr:= Ip;
end;

procedure TPingThread.Execute;
var
ttl: integer;
begin
Fc2:= 'no ping';
try
   FIdIcmpClient:= TIdIcmpClient.Create(nil);
   FIdIcmpClient.Host:= FIpAddr;
 try
   FIdIcmpClient.Ping;
   ttl:=FIdIcmpClient.ReplyStatus.TimeToLive;
   if TTL > 0 then
   Fc2 := '1';
   if TTL = 0 then
   Fc2 := '0';
 except
  Exit;
  end;
finally
 FreeAndNil(FIdIcmpClient);
 Synchronize(OnStop);
end;
end;

procedure TPingThread.OnStop;
begin
Form1.Memo1.Lines.Add(Fc2);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
TPingThread.Create('192.168.1.45');
end;
А вот когда то делал пинг на несколько адресов использовал непосредственно саму библиотеку ICMP.DLL. Есть там конечно небольшие ошибки но их можно подправить.
Может это вам поможет
Изображения
Тип файла: jpg ping.jpg (107.2 Кб, 66 просмотров)
Вложения
Тип файла: rar Ping2.rar (228.5 Кб, 15 просмотров)

Последний раз редактировалось Aliens_wolfs; 11.04.2019 в 10:29.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение к SQL по локалке Kote_Gaeshi Работа с сетью в Delphi 9 27.11.2014 08:43
Питон на локалке Mr_freeman PHP 2 06.07.2012 09:38
чат по локалке spydark91 Работа с сетью в Delphi 3 11.06.2011 22:46
2 ПК к одной локалке Papuas Помощь студентам 2 08.09.2008 09:34
Управление по локалкЕ ZhekON Работа с сетью в Delphi 5 17.07.2007 09:04