function LocalIP : string; 
type 
TaPInAddr = array [0..10] of PInAddr; 
PaPInAddr = ^TaPInAddr; 
var 
phe : PHostEnt; 
pptr : PaPInAddr; 
Buffer : array [0..63] of char; 
I : Integer; 
GInitData : TWSADATA; 
 
begin 
WSAStartup($101, GInitData); 
Result := ''; 
GetHostName(Buffer, SizeOf(Buffer)); 
phe :=GetHostByName(buffer); 
if phe = nil then Exit; 
pptr := PaPInAddr(Phe^.h_addr_list); 
I := 0; 
while pptr^[I] <> nil do begin 
result:=StrPas(inet_ntoa(pptr^[I]^)); 
Inc(I); 
end; 
WSACleanup; 
end; 
注意,需要use WinSock Unit. 

解决方案 »

  1.   

    //////////////////////////////////////////////
    取得本机ip和机器名
    //////////////////////////////////////////////uses winsock; function LocalIP: String; 
    type 
      TaPInAddr = Array[0..10] of PInAddr; 
      PaPInAddr = ^TaPInAddr; 
    var 
      phe: PHostEnt; 
      pptr: PaPInAddr; 
      Buffer: Array[0..63] of Char; 
      I: Integer; 
      GInitData: TWSAData; 
    begin 
      WSAStartup($101, GInitData); 
      Result := ''; 
      GetHostName(Buffer, SizeOf(Buffer)); 
      phe := GetHostByName(buffer); 
      if phe = nil then Exit; 
      pPtr := PaPInAddr(phe^.h_addr_list); 
      I := 0; 
      while pPtr^[I] <> nil do 
      begin 
        Result := inet_ntoa(pptr^[I]^); 
        Inc(I); 
      end; 
      WSACleanup; 
    end; function IPAddrToName(IPAddr : String): String; 
    var 
      SockAddrIn: TSockAddrIn; 
      HostEnt: PHostEnt; 
      WSAData: TWSAData; 
    begin 
      WSAStartup($101, WSAData); 
      SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr)); 
      HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET); 
      if HostEnt<>nil then 
      begin 
        result:=StrPas(Hostent^.h_name) 
      end 
      else 
      begin 
        result:=''; 
      end; 
    end; procedure TForm1.Button1Click(Sender: TObject); 
    begin 
      ShowMessage(IPAddrToName(LocalIp)); 
    end; 
      

  2.   

    //////////////////////////////////////////////
    取得本机ip和机器名
    //////////////////////////////////////////////uses winsock; function LocalIP: String; 
    type 
      TaPInAddr = Array[0..10] of PInAddr; 
      PaPInAddr = ^TaPInAddr; 
    var 
      phe: PHostEnt; 
      pptr: PaPInAddr; 
      Buffer: Array[0..63] of Char; 
      I: Integer; 
      GInitData: TWSAData; 
    begin 
      WSAStartup($101, GInitData); 
      Result := ''; 
      GetHostName(Buffer, SizeOf(Buffer)); 
      phe := GetHostByName(buffer); 
      if phe = nil then Exit; 
      pPtr := PaPInAddr(phe^.h_addr_list); 
      I := 0; 
      while pPtr^[I] <> nil do 
      begin 
        Result := inet_ntoa(pptr^[I]^); 
        Inc(I); 
      end; 
      WSACleanup; 
    end; function IPAddrToName(IPAddr : String): String; 
    var 
      SockAddrIn: TSockAddrIn; 
      HostEnt: PHostEnt; 
      WSAData: TWSAData; 
    begin 
      WSAStartup($101, WSAData); 
      SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr)); 
      HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET); 
      if HostEnt<>nil then 
      begin 
        result:=StrPas(Hostent^.h_name) 
      end 
      else 
      begin 
        result:=''; 
      end; 
    end; procedure TForm1.Button1Click(Sender: TObject); 
    begin 
      ShowMessage(IPAddrToName(LocalIp)); 
    end; 
      

  3.   

    提供一种最为简便的方法,请你笑纳:
    在FastNet面板上有一个NMTime控件,使用方法如下:procedure TForm1.Button1Click(Sender: TObject);
    begin
         Edit1.Text:=NMTime1.LocalIP;
    end;