a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Delphi > 正文

Delphi編程實現Ping操作

2019-11-18 19:00:45
字體:
來源:轉載
供稿:網友
Delphi編程實現Ping操作
  張泰立

  使用過網絡的用戶都熟悉“Ping”這個指令,它是一個DOS下的可執行文件,一般用它來檢查網絡連接的好壞程度。其基本原理是利用TCP/ip協議包中ICMP協議中的一個功能,即向所指定的計算機發送一個請求,收到請求的計算機返回一個應答,借此來判斷該計算機是否在網上運行或者檢查網絡連接是否穩定可靠。在Ping程序執行過程中,雙方計算機所耗費的資源都很少,因此,它是一個非常實用的工具。

  我們可以通過編程來實現“Ping”操作,對其加以改進,使之具有Windows的界面風格,顯示比DOS更加直觀。

  首先,對編程中需要的動態鏈接庫作一簡要說明:在Windows的System目錄下,你可以找到Icmp.dll文件,該動態鏈接庫提供了ICMP協議的所有功能,我們的編程就建立在對該動態鏈接庫的調用上。

  Icmp.dll文件內的調用函數說明如下:

  1、IcmpCreateFile

  打開一個句柄,通過該句柄你可以發送ICMP的請求回送報文。

  2、IcmpCloseHandle

  關閉你通過IcmpCreateFile函數打開的句柄。

  3、IcmpSendEcho

  通過你打開的句柄發送ICMP請求,在超時或應答報文接收后返回。其參數基本上和它的幀結構一致,可參看下面的程序部分,其具體含意你可以參看有關ICMP協議的書籍。

  初步了解了上述的三個函數后,我們就可以開始編程了。

  首先,我們的程序運行后應該有如圖1所示的基本功能。為此,我們可先在Delphi的窗口中放入右上圖中所示的控件,如按鈕、編輯框和文本顯示框等。

 ?。℅72.JPG)

  例程運行示意圖

  然后,在程序的開始部分(FormCreate)對WinSocket進行初始化,其作用是申明使用的版本信息,同時調入Icmp.dll庫。

  type

   PIPOptionInformation = ^TIPOptionInformation;

   TIPOptionInformation = packed record

   TTL: Byte;

   TOS: Byte;

   Flags: Byte;

   OptionsSize: Byte;

   OptionsData: PChar;

   end;

   PIcmpEchoReply = ^TIcmpEchoReply;

   TIcmpEchoReply = packed record

   Address: DWord;

   Status: DWORD;

   RTT: DWORD;

   DataSize: Word;

   Reserved: Word;

   Data: Pointer;

   Options: TIPOptionInformation;

   end;

   TIcmpCreateFile = function: THandle; stdcall;

   TIcmpCloseHandle = function(IcmpHandle: THandle): Boolean; stdcall;

   TIcmpSendEcho = function(IcmpHandle:THandle;

   DestinationAddress: DWORD;

   RequestData: Pointer;

   RequestSize: Word;

   RequestOptions: PIPOptionInformation;

   ReplyBuffer: Pointer;

   ReplySize: DWord;

   Timeout: DWord

   ): DWord; stdcall;

   TMyPing = class(TForm)

   Panel1: TPanel;

   Label1: TLabel;

   PingEdit: TEdit;

   ExeBtn: TButton;

   Button2: TButton;

   Button3: TButton;

   StatusShow: TMemo;

   PRocedure Button3Click(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure ExeBtnClick(Sender: TObject);

   private

   { Private declarations }

   hICMP: THANDLE;

   IcmpCreateFile : TIcmpCreateFile;

   IcmpCloseHandle: TIcmpCloseHandle;

   IcmpSendEcho: TIcmpSendEcho;

   public

   { Public declarations }

  end;

  procedure TMyPing.FormCreate(Sender: TObject);

  var

   WSAData: TWSAData;

   hICMPdll: HMODULE;

  begin

   WSAStartup($101, WSAData);

   // Load the icmp.dll stuff

   hICMPdll := LoadLibrary('icmp.dll');

   @ICMPCreateFile := GetProcAddress(hICMPdll, 'IcmpCreateFile');

   @IcmpCloseHandle := GetProcAddress(hICMPdll, 'IcmpCloseHandle');

   @IcmpSendEcho := GetProcAddress(hICMPdll, 'IcmpSendEcho');

   hICMP := IcmpCreateFile;

   StatusShow.Text := ';

   StatusShow.Lines.Add('目的IP地址 字節數 返回時間(毫秒)');

  end;

  接下來,就要進行如下所示的Ping操作的實際編程過程了。

  procedure TMyPing.ExeBtnClick(Sender: TObject);

  var

   IPOpt:TIPOptionInformation;// IP Options for packet to send

   FIPAddress:DWORD;

   pReqData,pRevData:PChar;

   pIPE:PIcmpEchoReply;// ICMP Echo reply buffer

   FSize: DWORD;

   MyString:string;

   FTimeOut:DWORD;

   BufferSize:DWORD;

  begin

   if PingEdit.Text <> ' then

   begin

   FIPAddress := inet_addr(PChar(PingEdit.Text));

   FSize := 40;

   BufferSize := SizeOf(TICMPEchoReply) + FSize;

   GetMem(pRevData,FSize);

   GetMem(pIPE,BufferSize);

   FillChar(pIPE^, SizeOf(pIPE^), 0);

   pIPE^.Data := pRevData;

   MyString := 'Hello,World';

   pReqData := PChar(MyString);

   FillChar(IPOpt, Sizeof(IPOpt), 0);

   IPOpt.TTL := 64;

   FTimeOut := 4000;

   IcmpSendEcho(hICMP, FIPAddress, pReqData, Length(MyString), @IPOpt, pIPE, BufferSize, FTimeOut);

   if pReqData^ = pIPE^.Options.OptionsData^ then

   begin

   StatusShow.Lines.Add(PChar(PingEdit.Text) + ' ' +IntToStr(pIPE^.DataSize) + ' ' +IntToStr(pIPE^.RTT));

   end;

   FreeMem(pRevData);

   FreeMem(pIPE);

   end

  end;

  通過上面的編程,我們就實現了Ping功能的界面操作。實際上,ICMP協議的功能還有很多,都可以通過對Icmp.dll的函數調用來實現。

上一篇:通用Delphi數據庫輸入控件DBPanel的實現

下一篇:用Delphi實現遠程屏幕抓取

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 希崎av在线 | 偷拍自拍网站 | 成人av在线网 | 欧美精品一区二区三区蜜桃视频 | www日韩欧美 | 久久成人国产精品 | 中文字幕精品一区二区三区精品 | 97综合 | 色婷婷亚洲一区二区三区 | 精品久久久久一区二区国产 | 手机看片麻豆 | 日韩成人三级 | 国产精品污www一区二区三区 | 成人免费视频网 | 欧美精品久久久久久久监狱 | 自拍偷拍欧美日韩 | 日韩三级电影网 | 欧美在线视频二区 | 欧美在线视频一区二区 | 亚洲91精品 | 亚洲va欧美va人人爽成人影院 | 欧美99| 久久精品系列 | 天天曰天天干 | 国产精品99久久 | 玖玖在线 | 国产精品视频久久久 | 人人草视频在线观看 | 免费人成在线观看网站 | 国产a区 | 亚洲国产欧美在线 | 最新日韩精品在线观看 | 国产亚洲精品精品国产亚洲综合 | 91香蕉视频在线观看 | 久久国产精品一区二区 | 自拍第一页| 成人在线视频网 | h视频网站在线 | 精品色区 | 91精品国产综合久久久久久漫画 | 国产精品成人一区二区三区夜夜夜 |