首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 取得本機電腦名稱與 IP 位址:Winsock API 完整範例

     編輯:Delphi

核心 API

  • GetComputerName:取得 NetBIOS 電腦名稱。
  • WSAStartup/WSACleanup:初始化/清理 Winsock。
  • gethostbyname:依主機名稱解析 IP 位址 (IPv4)。

完整單元程式碼

unit uGetHostInfo;

interface

uses Winsock, SysUtils;

function GetLocalComputerName: string;
function GetLocalIPAddress: string;

implementation

function GetLocalComputerName: string;
var
  Buffer: array[0..MAX_COMPUTERNAME_LENGTH + 1] of Char;
  Size: DWORD;
begin
  Result := '';
  Size := Length(Buffer);
  if GetComputerName(Buffer, Size) then
    Result := StrPas(Buffer);
end;

function GetLocalIPAddress: string;
var
  WSAData: TWSAData;
  HostEnt: PHostEnt;
  Name: string;
begin
  Result := '';
  if WSAStartup($0202, WSAData) <> 0 then Exit;
  try
    Name := GetLocalComputerName;
    if Name = '' then Exit;
    HostEnt := gethostbyname(PAnsiChar(AnsiString(Name)));
    if HostEnt <> nil then
      with HostEnt^ do
        Result := Format('%d.%d.%d.%d',
          [Byte(h_addr_list^[0]^), Byte(h_addr_list^[1]^),
           Byte(h_addr_list^[2]^), Byte(h_addr_list^[3]^)]);
  finally
    WSACleanup;
  end;
end;

end.

表單使用範例

procedure TForm1.btnGetInfoClick(Sender: TObject);
begin
  edtName.Text := GetLocalComputerName;
  edtIP.Text := GetLocalIPAddress;
end;

進階:支援多網卡與 IPv6

gethostbyname 僅回傳第一個 IPv4 位址。若需列舉所有網卡 IP (含 IPv6),請使用 GetAdaptersAddresses (IP Helper API) 或 Indy 的 TIdStack.LocalAddresses。

Indy 簡易版 (跨平台)

uses IdStack, SysUtils;

procedure TForm1.btnIndyClick(Sender: TObject);
var
  List: TIdStackLocalAddressList;
  Addr: string;
begin
  List := TIdStackLocalAddressList.Create;
  try
    GStack.GetLocalAddressList(List);
    for Addr in List do
      Memo1.Lines.Add(Addr);
  finally
    List.Free;
  end;
end;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved