📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdRawBase, IdRawClient,
IdIcmpClient;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
ListBox1: TListBox;
icmp: TIdIcmpClient;
procedure Button1Click(Sender: TObject);
procedure icmpReply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
private
{ Private declarations }
public
{ Public declarations }
end;
{
首先我们设计下界面
加一些控件
写程序一定要记得经常保存,好习惯,万一出以外,你可就要
重新写了,所以要保存哦
我们加入刚才说的ICMP控件
在 Indy Client 面版上,我们把名字改成ICMP下面我们加入
代码.首先是发送的.
这里就完成了发送部分,但是我们需要得到信息是在ICMP返回的时候,
所以需要添加一个事件,就是他的返回事件,刚才我们写了的.
这样我们就可以得到需要的信息,比如时间等.ICMP控件有这个事件
我们来加入代码
}
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer; //这里声明一个变量
begin
icmp.OnReply:=ICMPReply; //这里设置他的返回函数.
icmp.ReceiveTimeout:=1000; //设置超时的时间,1000为1秒(单位:MS)
button1.Enabled:=False; //设置他为灰色不可用状态
Try //这个为异常语句,具体请看Delphi的语法书吧
icmp.Host:=Edit1.Text; //设置目标主机地址
For i:=1 to 5 do
begin //这里发送5次
icmp.Ping(); //发送即PING操作;
end;
Finally //异常语句,大家不懂看书吧!
Button1.Enabled:=True; //少了个冒号呵呵,最近写VC写多了呵呵
End; //异常语句的结束
end;
procedure TForm1.icmpReply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
var
info:String;//声明一个变量用来保存返回的信息并格式化
begin
//一般我们需要的信息都保存在AReplyStatus 这个记录
//结构里
//我们只需要调用就是了.下面我们加入代码.
//我们先看下标准的WINDOWS自带那个PING程序返回的信息,我们模仿他
//格式:Reply from 192.168.5.10: bytes=32 time<1ms TTL=255
info:=(Format('Reply From %s: bytes=%d time=%dms TTL=%d',
[AReplyStatus.FromIpAddress,AReplyStatus.BytesReceived,
AReplyStatus.MsRoundTripTime,AReplyStatus.TimeToLive]));
//以上就是我们把信息格式化后保存在info这个变量里,Format语句大家不熟悉的话
//推荐去网上查下,因为篇幅有限呵呵,VC和C++这些语言里经常会用到
//不废话了下面我们只需要把这个信息在ListBox中显示出来就可以了
ListBox1.Items.Add(info);//加入进去
//好了,现在我们的程序就完成了呵呵,我们测试下!
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -