| 当要检测的IP比较少时,我们一般直接使用DOS命令Ping来实现。但是,如果我们要检测的IP比较多时(比如一个网段),再用Ping命令就比较繁琐了,即使写一个批处理来实现,大把数据看起来也让人恼火。这里,我们用Delphi实现对批量IP的检测,检测结果用明了的图形显示,效果如下: |
|
|
|
程序效果图 |
| 如上图,我们实现了对10.45.129.1到10.45.129.20这20个IP的检测,如果不可以Ping通,就用一个红色的感叹号表示。是不是简单明了?现在我们就来实现。 |
| 一:程序实现 |
| 在这个程序中,我们用TreeView来表示检测的IP结果;用ICS控件组的Ping控件来实现对IP的检测。 |
| 一)Ping功能的实现 |
| 为了实现Ping功能,我们在ICS的Ping控件基础上写一个函数,函数结果表示IP是否可以Ping通,如果可以,结果为True,反之,为False。函数如下: |
| //函数Ping |
| //使用了ICS的Ping控件 |
| Function TMainForm.Ping(strip:string):Boolean; |
| Begin |
| //IP地址 |
| ping1.address:=Trim(strip); |
| Ping1.ping; |
| //结果 |
| if ping1.ErrorCode=0 then |
| begin |
| ping:=True; |
| end |
| Else |
| Begin |
| ping:=False; |
| //如果不能Ping通,i加一; |
| i:=i+1; |
| End; |
| End; |
| 函数说明: |
| 参数strip:要检测的ip; |
| 变量i:如果不能Ping通,i加一(注意:I定义为一个全局变量); |
| 二)控件说明 |
| 程序中使用控件的属性功能如下: |
|
|
| 三)程序代码 |
| 主要代码部分如下: |
| var |
| MainForm: TMainForm; |
| //i记录不能Ping通的总数; |
| i:Integer; |
| implementation |
| {$R *.DFM} |
| Function TMainForm.Ping(strip:string):Boolean; |
| Begin |
| ping1.address:=Trim(strip); |
| Ping1.ping; |
| if ping1.ErrorCode=0 then |
| begin |
| ping:=True; |
| end |
| Else |
| Begin |
| ping:=False; |
| i:=i+1; |
| End; |
| End; |
| procedure TMainForm.Button1Click(Sender: TObject); |
| Var |
| h:Integer; |
| treenode1,treenode2:TTreeNode; |
| begin |
| //清空所有Item; |
| TreeView1.Items.Clear; |
| With TreeView1.Items Do |
| Begin |
| //增加根接点; |
| TreeNode1:=Add(nil, '批量IP检测'); |
| //全部展开所有结点 |
| TreeView1.FullExpand; |
| //刷新TreeView |
| TreeView1.Refresh; |
| //根结点图标 |
| TreeNode1.ImageIndex:=0; |
| TreeNode1.SelectedIndex:=0; |
| //二级接点 |
| For h:=StrToInt(Trim(Edit2.Text)) To StrToInt(Trim(Edit3.Text)) Do |
| Begin |
| if ping(Trim(Edit1.Text)+'.'+Trim(IntToStr(h)))=True Then |
| Begin |
| //如果可以Ping通,图标为0; |
| TreeNode2:=AddChild(TreeNode1,Trim(Edit1.Text)+'.'+IntToStr(h)); |
| TreeNode2.ImageIndex:=0; |
| TreeNode2.SelectedIndex:=0; |
| //全部展开所有结点 |
| TreeView1.FullExpand; |
| //刷新TreeView |
| TreeView1.Refresh; |
| End |
| Else |
| Begin |
| //如果不能Ping通,图标为1 |
| TreeNode2:=AddChild(TreeNode1,Trim(Edit1.Text)+'.'+IntToStr(h)); |
| TreeNode2.ImageIndex:=1; |
| TreeNode2.SelectedIndex:=1; |
| //全部展开所有结点 |
| TreeView1.FullExpand; |
| //刷新TreeView |
| TreeView1.Refresh; |
| End; |
| End; |
| h:=h+1; |
| End; |
| Label4.Caption:='检测结果:'+IntToStr(i)+' 个IP不能Ping通'; |
| Application.MessageBox('检测结束','提示',0); |
| End; |
| 二:程序说明 |
| 一) 以上程序可以实现对一个网段的检测,具体到应用,可以将要检测的IP放入数据库,同时用文字说明IP对应的机构或者计算机。检测时,直接读取数据库记录,将检测结果和数据库中的IP说明相结合,使结果直接具体到计算机名; |
| 二) ICS控间组的Ping控件功能很强,这里只是使用了它的最基本的一个功能,具体应用中,建议更多使用Ping控件的其他属性和功能,比如检测响应时间(ReplyTime)来检测IP状态是否良好。 |
| 三) 请勿用以上程序随意实验,以免浪费网络资源; |
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.07557201385498 seconds