取得本机IP:
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;
========================================
program get_ip;
uses
  winsock,sysutils;
VAR
  ch : ARRAY[1..32] OF Char;
  i : Integer;
  WSData: TWSAData;
  MyHost: PHostEnt;
begin
  IF WSAstartup(2,wsdata)<>0 THEN
    BEGIN
      Writeln('can''t start Winsock: Error ',WSAGetLastError);
      Halt(2);
    END;
  try
    IF getHostName(@ch[1],32)<>0 THEN
      BEGIN
        Writeln('getHostName failed');
        Halt(3);
      END;
  except
    Writeln('getHostName failed');
    halt(3);
  end;
  MyHost:=GetHostByName(@ch[1]);
  IF MyHost=NIL THEN
    BEGIN
      Writeln(GetHostName('+StrPas(@ch[1])+') failed : Error
'+IntToStr(WSAGetLastError));
      Halt(4);
    END
  ELSE
    BEGIN
        Write('address ');
         FOR i:=1 TO 4 DO
            BEGIN
              Write(Ord(MyHost.h_addr^[i-1]));
              IF i<4 THEN
then     write('.')
              ELSE
                writeln;
            END;
   END;
end.

解决方案 »

  1.   

    解析IP地址为主机名。使用 WinSock 单元;
    过程如下:
      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;
    测试时请在在线状态。测试代码:
    var
      Name: string;
    begin
      Name := InputBox('输入对方主机IP', '主机IP地址:', '');
      showmessage(IpAddrToName(Name));end;
      

  2.   

    本机器的计算机名可以通过getcomputername函数来获取
      

  3.   

    var
       p_c:array[1..48] of char;
       WSData:TWSAData;
       Host:PHostEnt;
    begin
       try
          WSAstartup(2,WSData);
          gethostname(@p_c[1],48);
          host:=gethostbyname(@p_c[1]);
          with host^ do
          p_computer:= Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]);
          p_computer:='Name:'+host.h_name+'  IP:'+p_computer;
       except
       end;
    end;
      

  4.   

    在引用单元用uses winsock
    然后放两个edit 和一个button
    procedure TForm1.Button1Click(Sender: TObject);
    var
        ip:string;
        ipstr:string;
        buffer:Array[1..32] of char;
        i:integer;
        WSData:TWSAData;
        host:PHostEnt;
    begin
        if WSAstartup(2,WSData)<>0 then
        begin
            showmessage('WS2_32.dll初始化失败');
            halt;
        end;
        GetHostName(@Buffer[1],32);
        host:=GetHostByName(@Buffer[1]);
        edit1.Text:=host.h_name;
        for i:=1 to 4 do
        begin
            ip:=IntToStr(ord(host.h_addr^[i-1]));//得到分段IP
            Ipstr:=Ipstr+ip;
            if i<4 then
                ipstr:=ipstr+'.'
            else
                edit2.Text:=ipstr;
        end;
        WSACleanup;
    end;