用Delphi打造图形界面的Ping程序


======================================================
注:本文源代码点此下载
======================================================

用delphi打造图形界面的ping程序

一、 前言

在日常网络管理时,我们常用ping命令来测试是否能与宿主(或路由)连通。但它一般是以命令行的形式提供给我们,不仅使用不方便,而且命令执行速度较快时,常常使我们看不清执行结果。那么,有没有办法来解决这个矛盾呢?答案当然是肯定的。下面,我们将利用delphi强大的网络编程功能来实现一个图形化的ping程序,程序的运行界面如图1所示。

程序的主要功能:在address后的编辑框中可以输入一个计算机的名称或者ip地址,然后按ping按钮或直接按回车可以测试与宿主计算机的连通性,如果连能正常,则在下面的列表框中显示宿主计算机的ip地址等信息。可以通过clear功能按钮实现对列表框信息的清除。

二、 编程原理

icmp(internet control messages protocol)是internet信报控制协议的简写,它将报文放在一个ip数据报的数据部分中通过网络传送,该协议允许路由器向其它的路由器或者主机发送并且回收差错与控制报文,它为发生差错的路由器提供了向源端报告差错的功能。连通性测试程序ping正是利用了icmp协议的这种特性,通过向目的端(宿主)发送并且回收信报来测试端到端的连通性。

delphi6.0新增了indy网络控件组,包括了几乎所有的网络协议控件,比如smtp、pop3、snmp及icmp等,避免了程序员直接与winsocket打交道,大大方便了我们编写网络程序。indy控件组分为server和clent两部分,以适应我们编写不同的服务器/工作站程序。我们可以很方便的在indy clent中找到icmp协议控件tidicmpclient。

tidicmpclient控件的常用属性如下:

host:宿主计算机的ip地址,可以是计算机的名字或者ip地址;

port:表示接收报文的本地系统的端口号;

receivetimeout:表示连接等待宿主计算机回应的最大时间,单位是毫秒。

tidicmpclient控件的主要方法:

ping():检测本地计算机与宿主计算机的连通性。

tidicmpclient控件的主要事件:

onicmpreply(asender: tcomponent; const areplystatus: treplystatus):在本地计算机接收到宿主计算机回应时触发,回收消息放在对象areplystatus中。

三、编程实现

下面我们就来制作一个图形界面的ping程序。

1、启动delphi6.0,打开一个新的标准工程。在窗体中添加所需的控件。

首先向窗体顶端添加一个panel控件,在其上再依次添加一个label、edit和两个button控件,并修改button控件的标题为“ping”和“clear”,然后再在panel下面添加一个listbox控件,最后再添加一个icmp控件,并修改其名字属性为“icmp”。依次设置其有关的属性等,修改后的窗体界面如图1所示。

2、edit1控件是实现ip地址或者计算机名字的输入的, button1则是实现ping功能的,将其default属性设为true,这样当用户按下回车键时,可以直接实现ping功能。其主要的代码段如下:

procedure tform1.button1click(sender: tobject);

var

i : integer;

begin

icmp.host := edit1.text ; //宿主计算机的名称或ip地址

icmp.receivetimeout := 1000; //最大等待时间

button1.enabled := false;

try

for i:=0 to 3 do //重复4次

begin

icmp.ping ;

application.processmessages ; //延时

end;

finally

button1.enabled := true;

end;

end;

3、当本地计算机向宿主计算机发送一个数据包,当本地计算机接收到宿主计算机的信息时,会触发icmpreply事件,可以在这个事件中实现对回收信息的显示或者差错等。其主要的代码段如下:

procedure tform1.icmpreply(asender: tcomponent;

const areplystatus: treplystatus);

var

stime: string;

begin

//检测ping的回复错误

if (areplystatus.msroundtriptime = 0 ) then

stime := '关注我收藏该文与我联系

posted on 2005-05-18 13:46 hingman 阅读(555) 评论(1)编辑 收藏


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值