程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi利用Indy的TIdIcmpClient組件實現Ping - 網址連接狀態檢測

Delphi利用Indy的TIdIcmpClient組件實現Ping - 網址連接狀態檢測

編輯:Delphi

Delphi可視化Ping命令,用來檢測網絡連接狀態,信息窗口類似Windows運行cmd窗口的效果一樣,顯示bytes、time、TTL等返回信息。這個Ping例子相對實現很簡單,原理是利用Indy的TIdIcmpClIEnt組件即可輕松完成此功能。最終的運行界面效果圖:

Delphi Ping命令檢測網絡連接

 完整代碼及注釋如下:

vIEw source print? 001 unit Unit1; 002 interface 003 uses 004   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 005   Dialogs, IDBaseComponent, IdComponent, IdRawBase, IdRawClIEnt, 006   IdIcmpClIEnt, ExtCtrls, ComCtrls, StdCtrls; 007 type 008   TForm1 = class(TForm) 009     Label2: TLabel; 010     Label3: TLabel; 011     Label4: TLabel; 012     Label5: TLabel; 013     Label1: TLabel; 014     Edit1: TEdit; 015     Button1: TButton; 016     Edit2: TEdit; 017     Memo1: TMemo; 018     Button2: TButton; 019     Memo2: TMemo; 020     Edit3: TEdit; 021     UpDown1: TUpDown; 022     Button3: TButton; 023     Timer1: TTimer; 024     IdIcmpClient1: TIdIcmpClIEnt; 025     procedure Button1Click(Sender: TObject); 026     procedure FormCreate(Sender: TObject); 027     procedure Button2Click(Sender: TObject); 028     procedure Button3Click(Sender: TObject); 029     procedure Timer1Timer(Sender: TObject); 030     procedure IdIcmpClIEnt1Reply(ASender: TComponent; 031       const AReplyStatus: TReplyStatus); 032   private 033     { Private declarations } 034   public 035     { Public declarations } 036   end; 037 var 038   Form1: TForm1; 039 implementation 040 {$R *.dfm} 041 procedure TForm1.Button1Click(Sender: TObject); 042 begin 043   Button1.Enabled := False; 044   Timer1.Interval := UpDown1.Position * 1000//設置循環時間 045   Timer1.Enabled := True//開始循環 046 end; 047 procedure TForm1.FormCreate(Sender: TObject); 048 begin 049   //通常在窗體建立的時候我們可以設置一些組件的屬性。 050   Memo1.ScrollBars := ssVertical; //顯示垂直滾動條 051   Memo1.Color := clBlack; 052   Memo1.Font.Color := clWhite; 053   Memo2.Font.Color := clRed; 054   Memo2.ScrollBars := ssVertical; 055   Timer1.Enabled := False; 056   UpDown1.Associate := Edit2; //關聯到Edit2 057   UpDown1.Min := 1//從1秒開始 058   UpDown1.Position := 5//默認5秒 059 end; 060 procedure TForm1.Button2Click(Sender: TObject); 061 begin 062   Timer1.Enabled := False; 063   Button1.Enabled := True; 064 end; 065 procedure TForm1.Button3Click(Sender: TObject); 066 begin 067   Close; 068 end; 069 procedure TForm1.Timer1Timer(Sender: TObject); 070 begin 071   try 072     IdIcmpClIEnt1.Host := Edit1.Text; 073     IdIcmpClIEnt1.Ping; //開始Ping操作 074   except 075     Timer1.Enabled := False//非法錯誤停止循環 076     Button1.Enabled := True; 077   end; 078 end; 079 procedure TForm1.IdIcmpClIEnt1Reply(ASender: TComponent; 080   const AReplyStatus: TReplyStatus); 081 var 082   sTime: string; 083   AMemo: TMemo; //當前添加內容的Memo組件 084 begin 085   if (AReplyStatus.MsRoundTripTime = 0then 086     sTime := '<1' 087   else 088     sTime := '='; 089   //超時Memo2顯示,正常狀態Memo1顯示 090   if (AReplyStatus.MsRoundTripTime > StrToIntDef(Edit3.Text, 1000)) then 091     AMemo := Memo2 else 092     AMemo := Memo1; 093   AMemo.Lines.Add(Format('%s Reply from %s: bytes=%d time%s%dms TTL=%d', [ 094     DatetimeToStr(now), 095       AReplyStatus.FromIpAddress, 096       AReplyStatus.BytesReceived, 097       sTime, 098       AReplyStatus.MsRoundTripTime, 099       AReplyStatus.TimeToLive 100       ])); 101 end; 102 end.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved