Здравствуйте!
Стоит такая задача: Есть ADSL модем (D-Link2500U), нужно при потери связи с интернетом его перегружать полностью, не только само соединение.
Решил так: по таймеру пингуется заданный IP адрес или сайт в интернете если пинга нет то ребут. Использую для пинга компонент PING из Internet Component Suite. Взял пример из книги Михаил Фленов Программирование в делфи гзазами хакера, но он почему то не работает вот листинг
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OverbyteIcsWndControl, OverbyteIcsPing, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
RichEdit1: TRichEdit;
Button1: TButton;
Ping1: TPing;
procedure Button1Click(Sender: TObject);
procedure Ping1DnsLookupDone(Sender: TObject; Error: Word);
procedure Ping1EchoReply(Sender, Icmp: TObject; Status: Integer);
procedure Ping1EchoRequest(Sender, Icmp: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
RichEdit1.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
//Вывести сообщение об ошибки
RichEdit1.Lines.Add ('Хост не найден ' + Edit1.Text + '') ;
//Выход
Exit
end;
//Если ошибок не было, то выводим в RichEditl результат поиска
RichEdit1.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
RichEdit1.Lines.Add('He могу выполнить операцию ping: '+Ping1.Errorstring)
else
RichEdit1.Lines.Add ('Получено ' + IntToStr (Ping1.Reply.DataSize)+
' байт от '+Ping1.HostIP+' за ' + IntToStr(Ping1.Reply.RTT)+
' миллисекунд');
end;
procedure TForm1.Ping1EchoRequest(Sender, Icmp: TObject);
begin
RichEdit1.Lines.Add('Посылка ' + IntToStr(Ping1.Size) +
' байтов на ' + Ping1.HostName);
end;
end.
Результат работы программы
Цитата:
Поиск Comp
Хост 'Comp - 192.168.1.2
Посылка 56 байтов на 192.168.1.2
He могу выполнить операцию ping: No error
Поиск 192.168.1.1
Хост '192.168.1.1 - 192.168.1.1
Посылка 56 байтов на 192.168.1.1
He могу выполнить операцию ping: No error
Поиск 83.221.202.254
Хост '83.221.202.254 - 83.221.202.254
Посылка 56 байтов на 83.221.202.254
He могу выполнить операцию ping: No error
Поиск www.google.ru
Хост 'www.google.ru - 173.194.32.51
Посылка 56 байтов на 173.194.32.51
He могу выполнить операцию ping: No error
Поиск www.yandex.ru
Хост 'www.yandex.ru - 93.158.134.203
Посылка 56 байтов на 93.158.134.203
He могу выполнить операцию ping: No error
Поиск www.ya.ru
Хост 'www.ya.ru - 213.180.204.3
Посылка 56 байтов на 213.180.204.3
He могу выполнить операцию ping: No error
|
Подскажите где я ошибся или как можно по другому решить эту проблему?
P.S. Использую Delphi XE