linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > Delphi >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·HexToStr函数和StrToHex函数
·Delphi中的进制转换
·delphi轻松设置无边框透明窗体
·DELPHI组件安装全攻略
·delphi第三方控件安装(Ehlib)
·delphi动态创建控件
·开发工具比较Visual C++ VS De
·delphi完整身份证效验程序实例
·如何判断文本文件的编码格式
·深入研究Variant数组
·delphi中的Format函数详解
·用delphi编写网络游戏的外挂
·Delphi技巧-用户自定义数据类型
·delphi编程获取打印机的打印任
·delphi设置控件透明
最新文章
·在应用程序中跟踪MOUSE的坐标
·压缩和修复MS Access 2000文件
·DELPHI 6.0 动画制做
·怎样在Delphi中调用LastError信
·怎样得到主域服务器名称
·怎样利用递归实现删除某一目录
·读出主键下所有项
·如何制作照片底片效果的图像(
·获得Modem的状态
·WebBrowser屏幕滚动的实现,设
·有关字符串处理的小技巧
·Delphi建立键盘鼠标动作纪录与
·Delphi中布尔类型辨析
·DELPHI程序注册码设计
·图形的不规则的Copy
Google
 
用Delphi打造图形界面的Ping程序
[ 作者:  加入时间:2007-12-03 14:55:11  来自:Linux联盟收集整理 ]
一、 前言hBkLinux联盟
在日常网络管理时,我们常用Ping命令来测试是否能与宿主(或路由)连通。但它一般是以命令行的形式提供给我们,不仅使用不方便,而且命令执行速度较快时,常常使我们看不清执行结果。那么,有没有办法来解决这个矛盾呢?答案当然是肯定的。下面,我们将利用Delphi强大的网络编程功能来实现一个图形化的Ping程序,程序的运行界面如图1所示。hBkLinux联盟
hBkLinux联盟
程序的主要功能:在Address后的编辑框中可以输入一个计算机的名称或者IP地址,然后按Ping按钮或直接按回车可以测试与宿主计算机的连通性,如果连能正常,则在下面的列表框中显示宿主计算机的IP地址等信息。可以通过Clear功能按钮实现对列表框信息的清除。hBkLinux联盟
二、 编程原理hBkLinux联盟
ICMP(Internet Control Messages Protocol)是Internet信报控制协议的简写,它将报文放在一个IP数据报的数据部分中通过网络传送,该协议允许路由器向其它的路由器或者主机发送并且回收差错与控制报文,它为发生差错的路由器提供了向源端报告差错的功能。连通性测试程序Ping正是利用了ICMP协议的这种特性,通过向目的端(宿主)发送并且回收信报来测试端到端的连通性。hBkLinux联盟
Delphi6.0新增了Indy网络控件组,包括了几乎所有的网络协议控件,比如SMTP、POP3、SNMP及ICMP等,避免了程序员直接与WinSocket打交道,大大方便了我们编写网络程序。Indy控件组分为Server和Clent两部分,以适应我们编写不同的服务器/工作站程序。我们可以很方便的在Indy Clent中找到ICMP协议控件TidIcmpClient。hBkLinux联盟
TidIcmpClient控件的常用属性如下:hBkLinux联盟
HOST:宿主计算机的IP地址,可以是计算机的名字或者IP地址;hBkLinux联盟
Port:表示接收报文的本地系统的端口号;hBkLinux联盟
ReceiveTimeout:表示连接等待宿主计算机回应的最大时间,单位是毫秒。hBkLinux联盟
TidIcmpClient控件的主要方法:hBkLinux联盟
Ping():检测本地计算机与宿主计算机的连通性。hBkLinux联盟
TidIcmpClient控件的主要事件:hBkLinux联盟
OnICMPReply(ASender: TComponent; const AReplyStatus: TReplyStatus):在本地计算机接收到宿主计算机回应时触发,回收消息放在对象AreplyStatus中。hBkLinux联盟
三、编程实现hBkLinux联盟
下面我们就来制作一个图形界面的Ping程序。hBkLinux联盟
1、启动Delphi6.0,打开一个新的标准工程。在窗体中添加所需的控件。hBkLinux联盟
首先向窗体顶端添加一个Panel控件,在其上再依次添加一个Label、Edit和两个Button控件,并修改Button控件的标题为“Ping”和“Clear”,然后再在Panel下面添加一个ListBox控件,最后再添加一个ICMP控件,并修改其名字属性为“ICMP”。依次设置其有关的属性等,修改后的窗体界面如图1所示。hBkLinux联盟
hBkLinux联盟
2、Edit1控件是实现IP地址或者计算机名字的输入的, Button1则是实现Ping功能的,将其Default属性设为True,这样当用户按下回车键时,可以直接实现Ping功能。其主要的代码段如下:hBkLinux联盟
procedure TForm1.Button1Click(Sender: TObject);hBkLinux联盟
varhBkLinux联盟
i : integer;hBkLinux联盟
beginhBkLinux联盟
  ICMP.Host := Edit1.Text ; //宿主计算机的名称或IP地址hBkLinux联盟
  ICMP.ReceiveTimeout := 1000; //最大等待时间hBkLinux联盟
  Button1.Enabled := false;hBkLinux联盟
  tryhBkLinux联盟
   for i:=0 to 3 do //重复4次hBkLinux联盟
   beginhBkLinux联盟
     ICMP.Ping ;hBkLinux联盟
     Application.ProcessMessages ; //延时hBkLinux联盟
   end;hBkLinux联盟
  finallyhBkLinux联盟
   Button1.Enabled := true;hBkLinux联盟
  end;hBkLinux联盟
end;hBkLinux联盟
3、当本地计算机向宿主计算机发送一个数据包,当本地计算机接收到宿主计算机的信息时,会触发ICMPReply事件,可以在这个事件中实现对回收信息的显示或者差错等。其主要的代码段如下:hBkLinux联盟
procedure TForm1.ICMPReply(ASender: TComponent;hBkLinux联盟
const AReplyStatus: TReplyStatus);hBkLinux联盟
varhBkLinux联盟
sTime: string;hBkLinux联盟
beginhBkLinux联盟
//检测Ping的回复错误hBkLinux联盟
if (AReplyStatus.MsRoundTripTime = 0 ) thenhBkLinux联盟
   sTime := '<1'hBkLinux联盟
elsehBkLinux联盟
   sTime := '=';hBkLinux联盟
//在列表框中显示Ping消息hBkLinux联盟
ListBox1.Items.Add(Format('ICMP_SEQ=%d Reply from %s [%s] : Bytes=%d time%s%d ms TTL=%d',hBkLinux联盟
[AReplyStatus.SequenceId,hBkLinux联盟
Edit1.Text,hBkLinux联盟
AReplyStatus.FromIpAddress,hBkLinux联盟
AReplyStatus.BytesReceived,hBkLinux联盟
sTime,hBkLinux联盟
AReplyStatus.MsRoundTripTime,hBkLinux联盟
AReplyStatus.TimeToLive]));hBkLinux联盟
end;hBkLinux联盟
4、Button2按钮是实现对列表框的清除功能的,代码段如下:hBkLinux联盟
procedure TForm1.Button2Click(Sender: TObject);hBkLinux联盟
beginhBkLinux联盟
ListBox1.Clear ;hBkLinux联盟
end;hBkLinux联盟
编译上面的程序,一个图形化的Ping程序就这样轻轻松松的展现在您的面前了,是不是很酷?实际上我们还可以通过Delphi6提供的Indy控件组,实现其它的网络程序。自己做一下,你会发现,你在做这些时其实很简单,因为Delphi6已经为程序员做了许多工作。好了,大家如果有什么问题欢迎发信到romanticonline@hotmail.com,大家共同进步吧。hBkLinux联盟
程序在Windows2000中文版、Delphi6.0下编译通过。hBkLinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·Delphi中异常的处理  (2007-12-03 14:50:54)
 ·在Delphi中侦测剪贴板的变化  (2007-12-03 14:48:21)
 ·delphi中的快捷键大收集  (2007-12-03 14:44:45)
 ·如何为Delphi程序添加事件和事件处理器  (2007-12-03 14:44:11)
 ·DELPHI中线程的初步探索  (2007-12-03 14:43:37)
 ·delphi端口扫描  (2007-12-03 14:39:06)
 ·DELPHI 中的规则表达式  (2007-12-03 14:37:59)
 ·面向对象编程与Delphi技术浅入讨论  (2007-12-03 14:34:41)
 ·delphi函数参考手册  (2007-11-26 14:31:15)
 ·Delphi中关于TApplication类的详解  (2007-11-26 14:30:15)