程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi編程實現Ping操作

Delphi編程實現Ping操作

編輯:Delphi
在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;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved