var
   host:PHostent;
   Consultresult:string;
   Err:integer;
 begin
   try
     host:=gethostbyname(pchar(edit1.text));
   except
     Err:=wsagetlasterror;
     edit2.text:='Error Code:'+inttostr(Err);
     exit;
   end;
   if host=nil then
     begin
      edit2.Text:='Host does not exist';
     end;
   Consultresult:=copy(host.h_addr^,0,4);
   edit2.text:='机器IP是:'+Format('%d.%d.%d.%d',[ord(Consultresult[1]),ord(Consultresult[2]),ord(Consultresult[3]),ord(Consultresult[4])]);
   edit3.Text:='机器名是:'+host.h_name;
 end;

解决方案 »

  1.   

    const
      WM_java=WM_USER+100;
    procedure Tform1.DoWithJava(var msg:Tresolved);
        var
         Consultresult:string;
        begin
          if buf.h_addr=NIL then
             begin
              edit2.text:='Failed To Resolved';
              exit;
             end;
         edit2.text:='机器IP是:'+Format('%d.%d.%d.%d',[ord(buf.h_addr^[0]),ord(buf.h_addr^[1]),ord(buf.h_addr^[2]),ord(buf.h_addr^[3])]);
         edit3.text:='机器名是:'+buf.h_name;
        end;procedure TForm1.Button2Click(Sender: TObject);
    var
      nowend:Thandle;
     begin
       nowend:=wsaasyncgethostbyname(handle,WM_java,pchar(edit1.text),pchar(@buf),maxgethoststruct);
     end;
      

  2.   

    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.
      

  3.   

    tocg1120(代码最优化) :你用的函数WSAstartup GetHostName 都是什么函数啊?怎么在帮助中找不到???
      

  4.   

    另外还可以用tnmdaytime得知自己的ip
    NMDT.localIP;
      

  5.   

    用控件吧
    IdIPWatch1: TIdIPWatch;
    IdIPWatch1.LocalIP;
      

  6.   

    看看KingRon的代码吧
    ///取得本机的IP地址
    function GetLocalIP:string;function GetLocalIP: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;
      

  7.   

    function OgcSystemGetComputerIPAddress(sComputerName: string): string; stdcall;
    var
      WSAData: TWSAData;
      HostEnt: PHostEnt;
      sIP: string;
    begin
      sIP := '';
      WSAStartup(2, WSAData);
      HostEnt := GetHostByName(PChar(sComputerName));  if HostEnt <> nil then
      begin
        with HostEnt^ do
          sIP := Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]),
            Byte(h_addr^[2]), Byte(h_addr^[3])]);
      end;