加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

(转)Delphi中TidIcmpClient控件的用法

(2012-03-28 12:50:04)
标签:

杂谈

 

Delphi中使用TidIcmpClient控件可以非常简单的实现图形界面的Ping
新建一个工程,命名为PingGUI.dpr,窗口命名为“frmPing”,加入如下组件:
     lstReplies: TListBox;
     ICMP: TIdIcmpClient;
     Panel1: TPanel;
     btnPing: TButton;
     edtHost: TEdit;
     spnPing: TSpinEdit;
     Label1: TLabel;

完整源代码如下:
unit Main;

interface

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


type
   TfrmPing = class(TForm)
     lstReplies: TListBox;
     ICMP: TIdIcmpClient;
     Panel1: TPanel;
     btnPing: TButton;
     edtHost: TEdit;
     spnPing: TSpinEdit;
     Label1: TLabel;
     procedure btnPingClick(Sender: TObject);
     procedure ICMPReply(ASender: TComponent; const ReplyStatus: TReplyStatus);
   private
   public
   end;

var
   frmPing: TfrmPing;

implementation
{$R *.DFM}

procedure TfrmPing.btnPingClick(Sender: TObject);
var
   i: integer;
begin
   ICMP.OnReply := ICMPReply;
   ICMP.ReceiveTimeout := 1000;
   btnPing.Enabled := False; try
     ICMP.Host := edtHost.Text;
     for i := 1 to spnPing.Value do begin
       ICMP.Ping;
       Application.ProcessMessages;
     end;
   finally btnPing.Enabled := True; end;
end;

procedure TfrmPing.ICMPReply(ASender: TComponent; const ReplyStatus: TReplyStatus);
var
   sTime: string;
begin
   // TODO: check for error on ping reply (ReplyStatus.MsgType?)
   if (ReplyStatus.MsRoundTripTime = 0) then
     sTime := '<1'
   else
     sTime := '=';

   lstReplies.Items.Add(Format('%d bytes from %s: icmp_seq=%d ttl=%d time%s%d ms',
     [ReplyStatus.BytesReceived,
     ReplyStatus.FromIpAddress,
     ReplyStatus.SequenceId,
     ReplyStatus.TimeToLive,
     sTime,
     ReplyStatus.MsRoundTripTime]));
end;

end

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有