<BODY>
<P ALIGN="center"><A ><FONT SIZE="4"><B>編程動動手,Ping程序“跟你走”![原創(chuàng)]</B></FONT></A><FONT COLOR="#333333" FACE="宋體"><BR>
---用Delphi打造圖形界面的Ping程序[原創(chuàng)]
<P ALIGN="right">★ 中共河南省濟源市委黨校,耿百強<BR>
<BR>
摘要:本文主要介紹利用Delphi6實現(xiàn)一個圖形界面Ping程序的方法,其中主要討論了ICMP協(xié)議和ICMP協(xié)議控件及其編程方法,并給出了一個實例程序。解決了Ping命令行程序的缺點。<BR>
關鍵詞:Delphi,ICMP協(xié)議,Ping程序</P>
<P>一、 前言<BR>
在日常網(wǎng)絡管理時,我們常用Ping命令來測試是否能與宿主(或路由)連通。但它一般是以命令行的形式提供給我們,不僅使用不方便,而且命令執(zhí)行速度較快時,常常使我們看不清執(zhí)行結果。那么,有沒有辦法來解決這個矛盾呢?答案當然是肯定的。下面,我們將利用Delphi強大的網(wǎng)絡編程功能來實現(xiàn)一個圖形化的Ping程序,程序的運行界面如圖1所示。<BR>
<BR>
<IMG BORDER="0" SRC="http://www.jyzx.com/bbs/pic/jpg.gif" WIDTH="16" HEIGHT="16">此主題相關圖片如下:<BR>
<A TARGET="_blank"><IMG ALT="按此在新窗口瀏覽圖片" BORDER="0" ONLOAD="javascr程序的主要功能:在Address后的編輯框中可以輸入一個計算機的名稱或者IP地址,然后按Ping按鈕或直接按回車可以測試與宿主計算機的連通性,如果連能正常,則在下面的列表框中顯示宿主計算機的IP地址等信息。可以通過Clear功能按鈕實現(xiàn)對列表框信息的清除。<BR>
二、 編程原理<BR>
ICMP(Internet Control Messages PRotocol)是Internet信報控制協(xié)議的簡寫,它將報文放在一個IP數(shù)據(jù)報的數(shù)據(jù)部分中通過網(wǎng)絡傳送,該協(xié)議允許路由器向其它的路由器或者主機發(fā)送并且回收差錯與控制報文,它為發(fā)生差錯的路由器提供了向源端報告差錯的功能。連通性測試程序Ping正是利用了ICMP協(xié)議的這種特性,通過向目的端(宿主)發(fā)送并且回收信報來測試端到端的連通性。<BR>
Delphi6.0新增了Indy網(wǎng)絡控件組,包括了幾乎所有的網(wǎng)絡協(xié)議控件,比如SMTP、POP3、SNMP及ICMP等,避免了程序員直接與WinSocket打交道,大大方便了我們編寫網(wǎng)絡程序。Indy控件組分為Server和Clent兩部分,以適應我們編寫不同的服務器/工作站程序。我們可以很方便的在Indy Clent中找到ICMP協(xié)議控件TidIcmpClient。<BR>
TidIcmpClient控件的常用屬性如下:<BR>
HOST:宿主計算機的IP地址,可以是計算機的名字或者IP地址;<BR>
Port:表示接收報文的本地系統(tǒng)的端口號;<BR>
ReceiveTimeout:表示連接等待宿主計算機回應的最大時間,單位是毫秒。<BR>
TidIcmpClient控件的主要方法:<BR>
Ping():檢測本地計算機與宿主計算機的連通性。<BR>
TidIcmpClient控件的主要事件:<BR>
OnICMPReply(ASender: TComponent; const AReplyStatus: TReplyStatus):在本地計算機接收到宿主計算機回應時觸發(fā),回收消息放在對象AreplyStatus中。<BR>
三、編程實現(xiàn)<BR>
下面我們就來制作一個圖形界面的Ping程序。<BR>
1、啟動Delphi6.0,打開一個新的標準工程。在窗體中添加所需的控件。<BR>
首先向窗體頂端添加一個Panel控件,在其上再依次添加一個Label、Edit和兩個Button控件,并修改Button控件的標題為“Ping”和“Clear”,然后再在Panel下面添加一個ListBox控件,最后再添加一個ICMP控件,并修改其名字屬性為“ICMP”。依次設置其有關的屬性等,修改后的窗體界面如圖2所示。<BR>
<BR>
<IMG BORDER="0" SRC="http://www.jyzx.com/bbs/pic/jpg.gif" WIDTH="16" HEIGHT="16">此主題相關圖片如下:<BR>
<A TARGET="_blank"><IMG ALT="按此在新窗口瀏覽圖片" BORDER="0" ONLOAD="Javascript:if(this.width>screen.width-333)this.width=screen.width-333" SRC="http://www.jyzx.com/bbs/uploadImages/20023813315035522.jpg" WIDTH="442" HEIGHT="293"></A><BR>
<BR>
2、Edit1控件是實現(xiàn)IP地址或者計算機名字的輸入的, Button1則是實現(xiàn)Ping功能的,將其Default屬性設為True,這樣當用戶按下回車鍵時,可以直接實現(xiàn)Ping功能。其主要的代碼段如下:<BR>
procedure TForm1.Button1Click(Sender: TObject);<BR>
var<BR>
i : integer;<BR>
begin<BR>
ICMP.Host := Edit1.Text ; file://宿主計算機的名稱或IP地址<BR>
ICMP.ReceiveTimeout := 1000; file://最大等待時間<BR>
Button1.Enabled := false;<BR>
try<BR>
for i:=0 to 3 do file://重復4次<BR>
begin<BR>
ICMP.Ping ;<BR>
application.ProcessMessages ; file://延時<BR>
end;<BR>
finally<BR>
Button1.Enabled := true;<BR>
end;<BR>
end;<BR>
3、當本地計算機向宿主計算機發(fā)送一個數(shù)據(jù)包,當本地計算機接收到宿主計算機的信息時,會觸發(fā)ICMPReply事件,可以在這個事件中實現(xiàn)對回收信息的顯示或者差錯等。其主要的代碼段如下:<BR>
<P>procedure TForm1.ICMPReply(ASender: TComponent;<BR>
const AReplyStatus: TReplyStatus);<BR>
var<BR>
sTime: string;<BR>
begin<BR>
file://檢測Ping的回復錯誤<BR>
if (AReplyStatus.MsRoundTripTime = 0 ) then<BR>
sTime := '<1'<BR>
else<BR>
sTime := '=';</P>
<P> file://在列表框中顯示Ping消息<BR>
ListBox1.Items.Add(Format('ICMP_SEQ=%d Reply from %s [%s] : Bytes=%d time%s%d ms TTL=%d',<BR>
[AReplyStatus.SequenceId,<BR>
Edit1.Text,<BR>
AReplyStatus.FromIpAddress,<BR>
AReplyStatus.BytesReceived,<BR>
sTime,<BR>
AReplyStatus.MsRoundTripTime,<BR>
AReplyStatus.TimeToLive]));<BR>
end;<BR>
</P>
4、Button2按鈕是實現(xiàn)對列表框的清除功能的,代碼段如下:<BR>
procedure TForm1.Button2Click(Sender: TObject);<BR>
begin<BR>
ListBox1.Clear ;<BR>
end;<BR>
編譯上面的程序,一個圖形化的Ping程序就這樣輕輕松松的展現(xiàn)在您的面前了,是不是很酷?實際上我們還可以通過Delphi6提供的Indy控件組,實現(xiàn)其它的網(wǎng)絡程序。自己做一下,你會發(fā)現(xiàn),你在做這些時其實很簡單,因為Delphi6已經(jīng)為程序員做了許多工作。好了,大家如果有什么問題歡迎發(fā)信到romanticonline@hotmail.com,大家共同進步吧。<BR>
程序在Windows2000中文版、Delphi6.0下編譯通過。</P>
<P><SPAN CLASS="TEXTFONT">作者:耿百強<BR>
地址:中共河南省濟源市委黨校<BR>
郵政編碼:454650<BR>
聯(lián)系電話:0391-6666267<BR>
E-Mail:dxgbq@sohu.com<BR>
OICQ:10562208<BR>
寫稿日期:2002-3-12<BR>
</SPAN></P>
<P><BR>
</P>
</FONT>
</BODY>
新聞熱點
疑難解答