太阳赤纬如何看都有那些主机在线,用DELPHI编写最佳答案:利用PING命令探测比较方便以下代码稍微修改即可在Delphi中使用TidIcmpClient控件可以非常简单的实现图形界面的Ping!新建一个工程,命名为PingGUI.dpr,窗口命名为“frmPing”,加入如下组件:lst 如题,如何看都有那些主机在线,用DELPHI编写
利用PING命令探测比较方便以下代码稍微修改即可
在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:=1to 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.