熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

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

2013-11-23 17:44:10  來源: Delphi編程 

  摘 要本文主要介紹利用Delphi實現一個圖形界面Ping程序的方法其中主要討論了ICMP協議和ICMP協議控件及其編程方法並給出了一個實例程序解決了Ping命令行程序的缺點

  關鍵詞DelphiICMP協議Ping程序

  操作系統Windows Server 中文版
  編程工具Delphi

   前言

  在日常網絡管理時我們常用Ping命令來測試是否能與宿主(或路由)連通但它一般是以命令行的形式提供給我們不僅使用不方便而且命令執行速度較快時常常使我們看不清執行結果那麼有沒有辦法來解決這個矛盾呢?答案當然是肯定的下面我們將利用Delphi強大的網絡編程功能來實現一個圖形化的Ping程序程序的運行界面如圖所示

  程序的主要功能在Address後的編輯框中可以輸入一個計算機的名稱或者IP地址然後按Ping按鈕或直接按回車可以測試與宿主計算機的連通性如果連能正常則在下面的列表框中顯示宿主計算機的IP地址等信息可以通過Clear功能按鈕實現對列表框信息的清除

   編程原理

  ICMP(Internet Control Messages Protocol)是Internet信報控制協議的簡寫它將報文放在一個IP數據報的數據部分中通過網絡傳送該協議允許路由器向其它的路由器或者主機發送並且回收差錯與控制報文它為發生差錯的路由器提供了向源端報告差錯的功能連通性測試程序Ping正是利用了ICMP協議的這種特性通過向目的端(宿主)發送並且回收信報來測試端到端的連通性

  Delphi新增了Indy網絡控件組包括了幾乎所有的網絡協議控件比如SMTPPOPSNMP及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程序

  啟動Delphi打開一個新的標准工程在窗體中添加所需的控件
 
  首先向窗體頂端添加一個Panel控件在其上再依次添加一個LabelEdit和兩個Button控件並修改Button控件的標題為PingClear然後再在Panel下面添加一個ListBox控件最後再添加一個ICMP控件並修改其名字屬性為ICMP依次設置其他有關的屬性等

  Edit控件是實現IP地址或者計算機名字的輸入的 Button則是實現Ping功能的將其Default屬性設為True這樣當用戶按下回車鍵時可以直接實現Ping功能其主要的代碼段如下

procedure TFormButtonClick(Sender: TObject);
var
i : integer;
begin
ICMPHost := EditText ; //宿主計算機的名稱或IP地址
ICMPReceiveTimeout := ; //最大等待時間
ButtonEnabled := false;
try
for i:= to do //重復
begin
ICMPPing ;
ApplicationProcessMessages ; //延時
end;
finally
ButtonEnabled := true;
end;
end;

  當本地計算機向宿主計算機發送一個數據包當本地計算機接收到宿主計算機的信息時會觸發ICMPReply事件可以在這個事件中實現對回收信息的顯示或者差錯等其主要的代碼段如下

procedure TFormICMPReply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
var
sTime: string;
begin
//檢測Ping的回復錯誤
if (AReplyStatusMsRoundTripTime = ) then
sTime := <
else
sTime := =;

//在列表框中顯示Ping消息
ListBoxItemsAdd(Format(ICMP_SEQ=%d Reply from %s [%s] : Bytes=%d time%s%d ms TTL=%d
[AReplyStatusSequenceId
EditText
AReplyStatusFromIpAddress
AReplyStatusBytesReceived
sTime
AReplyStatusMsRoundTripTime
AReplyStatusTimeToLive]));
end;
Button按鈕是實現對列表框的清除功能的代碼段如下
procedure TFormButtonClick(Sender: TObject);
begin
ListBoxClear ;
end;

  編譯上面的程序一個圖形化的Ping程序就這樣輕輕松松的展現在您的面前了是不是很酷?實際上我們還可以通過Delphi提供的Indy控件組實現其它的網絡程序自己做一下你會發現你在做這些時其實很簡單因為Delphi已經為程序員做了許多工作好了大家如果有什麼問題歡迎發信到romanticonline@hotmailcom大家共同進步吧
程序在Windows中文版Delphi下編譯通過


From:http://tw.wingwit.com/Article/program/Delphi/201311/24975.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.