Delphi編程根據(jù)IP地址得到主機名

字號:

在網(wǎng)絡(luò)程序的設(shè)計過程中,經(jīng)常需要根據(jù)得到的IP地址取得主機的名稱,本實例將演示如何根據(jù)用戶輸入的IP地址獲取對應(yīng)主機的名稱。
    向窗體上添加兩個TLabel組件、兩個TEdit組件和一個TButton組件,設(shè)計完成的主界面如圖1所示。
    圖1 主界面
    在程序運行過程中首先需要向程序的uses段中加入Winsock,這樣就可以調(diào)用與Winsock相關(guān)的函數(shù)進行操作。
    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;
    程序運行初期就會執(zhí)行FormCreate中的代碼,首先通過OpenDialog.Execute語句來顯示一個提示讀者選擇文件的對話框。如果用戶在該對話框中確認選擇了一個有效文件后,就把文件路徑和文件名等信息存儲在變量FileName中,把文件讀寫屬性等信息存儲在變量Attributes中。然后通過判斷Attributes分別與faReadOnly、faArchive、faSysFile和faHidden常量比較的結(jié)果,來決定ReadOnly、Archive、System和Hidden4個CheckBox組件的選中狀態(tài)。
    通過lblPosition.Caption:=lblPosition.Caption+ExtractFileDir(FileName)語句在lblPosition組件中顯示文件位置,通過lblName.Caption:=lblName.Caption+ExtractFileName(FileName)語句顯示文件名。最后通過GetFileSize函數(shù)和lblSize.Caption:=lblSize.Caption+Format('%d bytes', [GetFileSize(FileName)])語句來顯示文件大小,GetFileSize函數(shù)代碼如下:
    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)語句來查找目標文件,找到后設(shè)置GetFileSize函數(shù)的返回值為目標文件的大小SearchRec.Size。