Пошук комп'ютерів в мережі

Як бачите алгоритм пошуку дуже просто, але даний метод досить повільний, звичайно все залежить від розміру вашої локальної обчислювальної мережі. Ну а тепер поговоримо про самому компоненті, з яким ми будемо працювати. Даний компонент, як говорилося раніше входить до складу бібліотеки Indy і перебувати у вкладці - IndyClients. а називається він - TIdIcmpClient. Даний компонент якраз надає нам таку можливість як пінгувати конкретний хост. До нашого завдання нам це безперечно підходить. Що нам необхідно, щоб пінгувати якийсь хост, відповідно ім'я хоста, потім розмір пакета, який ми будемо відправляти на хост, а також при необхідно порт і TimeOut.

Отже, що ми робимо, задаємо ім'я хоста, потім TimeOut. через скільки припиняти відправку пакета, далі за допомогою методу Ping ми відправляємо пакет, при необхідно вказуємо розміру пакет (не обов'язково параметр), а в Caption (заголовок) нашого вікна виводимо час в мілісекундах за скільки наш пакет розміром 32 байта був відправлений на хост. Далі виділяємо наш компонент TIdIcmpClient. Далі переходимо до списку подій даного компонента і вибираємо подія OnReply. Після чого на дану подію пишемо наступний код:

Що ми тут робимо, просто перевіряємо на існування наші хости, якщо він існує, то додаємо в список, якщо немає, то нічого не робимо, звичайно якщо не існує хост, то в AReplyStatus.FromIpAddress буде хост типу 0.0.0.0.

Ну а програми. які виробляють пошук комп'ютерів в мережі, досить багато, тим більше для Windows

Вихідні тексти статті скачати можна тут

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdRawBase, IdRawClient,
IdIcmpClient, StdCtrls;

type
TForm1 = class (TForm)
btn1: TButton;
lst1: TListBox;
idcmpclnt1: TIdIcmpClient;
procedure btn1Click (Sender: TObject);
procedure idcmpclnt1Reply (ASender: TComponent;
const AReplyStatus: TReplyStatus);
private

public

end;

var
Form1: TForm1;

procedure TForm1.btn1Click (Sender: TObject);
begin
idcmpclnt1.Host:='176.194.204.175 ';
idcmpclnt1.ReceiveTimeout: = 100;
idcmpclnt1.Ping ('32 ');
Caption: = IntToStr (idcmpclnt1.ReplyStatus.MsRoundTripTime)
end;

procedure TForm1.idcmpclnt1Reply (ASender: TComponent;
const AReplyStatus: TReplyStatus);
begin
try
if idcmpclnt1.Host = AReplyStatus.FromIpAddress then lst1.Items.Add (AReplyStatus.FromIpAddress);
except
on e: Exception do
end;

Почім вона не працює?

Схожі статті