程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi編程根據IP地址得到主機名

Delphi編程根據IP地址得到主機名

編輯:Delphi

在網絡程序的設計過程中,經常需要根據得到的IP地址取得主機的名稱,本實例將演示如何根據用戶輸入的IP地址獲取對應主機的名稱。

向窗體上添加兩個TLabel組件、兩個TEdit組件和一個TButton組件,設計完成的主界面如圖1所示。

圖1 主界面

在程序運行過程中首先需要向程序的uses段中加入Winsock,這樣就可以調用與Winsock相關的函數進行操作。

Attributes和FileName是兩個全局變量。其中Word類型的Attributes變量用於存儲文件的屬性,而String類型的FileName屬性用於存儲文件的路徑和文件名。

另外還要在FormCreate過程中添加下列代碼:

procedure TfrmMain.btnConversionClick(Sender: TObject);
  var
   WSAData: TWSAData;
   HostEnt: PHostEnt;
   IPAddress: string;
   addr: dword;
  begin
   edtName.Clear;
   WSAStartup(2, WSAData);
   IPAddress:=edtAddress.Text;
   try
    addr := inet_addr(PChar(IPAddress));
    HostEnt:= GetHostByAddr(@addr, Length(IPAddress), PF_INET);
    edtName.Text:=HostEnt.h_name;
   except
    ShowMessage('無效的IP地址');
   end;
   WSACleanup;
end;

程序運行初期就會執行FormCreate中的代碼,首先通過OpenDialog.Execute語句來顯示一個提示讀者選擇文件的對話框。如果用戶在該對話框中確認選擇了一個有效文件後,就把文件路徑和文件名等信息存儲在變量FileName中,把文件讀寫屬性等信息存儲在變量Attributes中。然後通過判斷Attributes分別與faReadOnly、faArchive、faSysFile和faHidden常量比較的結果,來決定ReadOnly、Archive、System和Hidden4個CheckBox組件的選中狀態。

通過lblPosition.Caption:=lblPosition.Caption+ExtractFileDir(FileName)語句在lblPosition組件中顯示文件位置,通過lblName.Caption:=lblName.Caption+ExtractFileName(FileName)語句顯示文件名。最後通過GetFileSize函數和lblSize.Caption:=lblSize.Caption+Format('%d bytes', [GetFileSize(FileName)])語句來顯示文件大小,GetFileSize函數代碼如下:

function TfrmMain.GetFileSize(const FileName: string): LongInt;
  var
   SearchRec: TSearchRec;
  begin
  try
   if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then
    Result := SearchRec.Size
   else Result := -1;
   finally
    SysUtils.FindClose(SearchRec);
end;
end;

首先聲明SearchRec為一個查找記錄,然後通過FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec)語句來查找目標文件,找到後設置GetFileSize函數的返回值為目標文件的大小SearchRec.Size。

程序代碼如下:

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask,Winsock;
type
  TfrmMain = class(TForm)
  Label1: TLabel;
  btnConversion: TButton;
  edtName: TEdit;
  Label2: TLabel;
  edtAddress: TEdit;
  procedure btnConversionClick(Sender: TObject);
  procedure FormCreate(Sender: TObject);
  procedure edtAddressChange(Sender: TObject);
private
  { Private declarations }
public
  { Public declarations }
end;
var
  frmMain: TfrmMain;
  implementation
  {$R *.dfm}
  procedure TfrmMain.btnConversionClick(Sender: TObject);
var
  WSAData: TWSAData;
  HostEnt: PHostEnt;
  IPAddress: string;
  addr: dword;
begin
  edtName.Clear;
  WSAStartup(2, WSAData);
  IPAddress:=edtAddress.Text;
  try
   addr := inet_addr(PChar(IPAddress));
   HostEnt:= GetHostByAddr(@addr, Length(IPAddress), PF_INET);
   edtName.Text:=HostEnt.h_name;
  except
   ShowMessage('無效的IP地址');
  end;
  WSACleanup;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
  edtAddress.Clear;
  edtName.Clear;
  btnConversion.Enabled:=False;
end;
procedure TfrmMain.edtAddressChange(Sender: TObject);
  begin
   btnConversion.Enabled:=True;
   if edtAddress.Text='' then
   begin
    btnConversion.Enabled:=False;
   end;
  end;
end.

保存文件,然後按F9鍵運行程序,程序運行的初始畫面如圖2所示。

在“IP地址”對應的文本框中輸入一個有效的IP地址,單擊“轉換”按鈕,程序就會在“主機名”對應的文本框中顯示該IP地址對應的主機名,如圖3所示。

圖2 程序運行的初始畫面

圖3 程序運行結果

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved