お久しぶりです。
久しぶりにdelphiを使った。
Embarcadero® RAD Studio 10.1 Berlin バージョン 24.0.25048.9432
無料版である。
pingを実行したかった。
ExPingというフリーソフトがあるが、あれに機能を加えたいと思っている。
いきなりソースを貼る。
-----
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, IdBaseComponent,
IdComponent, IdRawBase, IdRawClient, IdIcmpClient;
type
TForm1 = class(TForm)
Button1: TButton;
IdIcmpClient1: TIdIcmpClient;
Edit1: TEdit;
Memo1: TMemo;
Edit2: TEdit;
Label1: TLabel;
Edit3: TEdit;
Label2: TLabel;
Edit4: TEdit;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function DoPing (Host: String; TimeOut: Integer) : String;
begin
// ShowMessage('hello');
TIdIcmpClient.Create();
Form1.IdIcmpClient1 := TIdIcmpClient.Create(nil);
Form1.IdIcmpClient1.ReceiveTimeout := TimeOut;
Form1.IdICMPClient1.Host:= Host;
Form1.IdICMPClient1.Ping();
if (Form1.IdIcmpClient1.ReplyStatus.ReplyStatusType = rsTimeout) then
begin
Result :='Timeout'
end
else
if(Form1.IdIcmpClient1.ReplyStatus.ReplyStatusType = rsEcho) then
begin
Result :=
Form1.IdIcmpClient1.ReplyStatus.FromIpAddress
+ ' -> '
+ Form1.IdIcmpClient1.ReplyStatus.ToIpAddress
+ ' '
+ IntToStr(Form1.IdIcmpClient1.ReplyStatus.BytesReceived)
+ ' Bytes received: '
+ ' TTL: '
+ IntToStr(Form1.IdIcmpClient1.ReplyStatus.TimeToLive)
+ ' time: ' + IntToStr(Form1.IdIcmpClient1.ReplyStatus.MsRoundTripTime)
end;
Form1.IdIcmpClient1.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Num: Integer;
TimeOut: Integer;
Interval:Integer;
i:integer;
begin
Num := StrToIntDef(Edit2.Text, 3);
TimeOut := StrToIntDef(Edit3.Text, 1000);
Interval := StrToIntDef(Edit4.Text, 1000);
for i:=1 to Num do begin
Memo1.Lines.Add(DoPing(Edit1.Text, TimeOut));
Sleep(Interval);
end;
end;
end.
-----
これはまだ基本機能しかない。
ちなみにF9を押すとアプリは起動するが実行するとエラーになる。
実行ファイルを「管理者として実行」しないとダメだ。
実行ファイルはプロジェクトが保存されているフォルダ配下の Win32\Debug にある。
これからやること。
・回数に0を指定したら停止ボタンを押すまで実行し続ける。
・timeout以外のエラーの対応
・統計情報の表示
・実行結果と統計情報の自動保存機能
・複数宛先を指定した場合順番にでなく並列に実施し、宛先ごとに結果と統計を保存する。つまりマルチスレッドにする
・名前解決に失敗すると例外になるのでその対応
ラベル:INDY