已知一个机器名,如何得到它的IP地址?是不是用GetHostByName,最好给个简单的代码!多谢!

解决方案 »

  1.   

    引用Unit2,然后,调用getIP()。getIP()返回IP字符串。 unit Unit2; interface 
      uses 
        winsock,sysutils; 
    //  type 
    // 
      var 
        ch:array[1..32] of char; 
        wsData:TWSAData; 
        myHost:PHostEnt; 
        function getIP():string;forward; 
    implementation   function getIP():string; 
        var 
          i:integer; 
        begin 
            if WSAstartup(2,wsData)<>0 then 
             begin 
               Result:=’can’’t start winsock:error’; 
               exit; 
             end; 
            try 
              if getHostName(@ch[1],32)<>0 then 
                begin 
                  result:=’getHostName failed’; 
                  exit; 
                end; 
            except 
              result:=’getHostName failed’; 
              exit; 
            end; 
            myHost:=GetHostByName(@ch[1]); 
            if myHost=nil then 
             begin 
                result:=’GetHostName(’+StrPas(@ch[1])+’) failed:error’+IntToStr(WSAGetLastError); 
                exit; 
             end 
            else 
             begin 
               //result:=’---’; 
               for i :=1  to 4 do 
                 begin 
                   result:=result+IntToStr(Ord(myHost.h_addr^[i-1])); 
                   if i<4 then 
                    result:=result+’.’ 
                   else 
                    //result:=result+’---’; 
                 end; 
             end; 
        end; 
    end. 
      

  2.   

    uses Winsock;
    function HostToIP(Name: string; var Ip: string): Boolean;
    var
      wsdata : TWSAData;
      hostName : array [0..255] of char;
      hostEnt : PHostEnt;
      addr : PChar;
    begin
      WSAStartup ($0101, wsdata);
      try
        gethostname (hostName, sizeof (hostName));
        StrPCopy(hostName, Name);
        hostEnt := gethostbyname (hostName);
        if Assigned (hostEnt) then
          if Assigned (hostEnt^.h_addr_list) then begin
            addr := hostEnt^.h_addr_list^;
            if Assigned (addr) then begin
              IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
              byte (addr [1]), byte (addr [2]), byte (addr [3])]);
              Result := True;
            end
            else
              Result := False;
          end
          else
            Result := False
        else begin
          Result := False;
        end;
      finally
        WSACleanup;
      end
    end;procedure TForm1.Button1Click(Sender: TObject);
    var ip:string;
    begin
       HostToIP('whh',ip);
       showmessage(ip);
    end;
      

  3.   

    定义一个函数,调用它就可以了,取得本机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.
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    vardd:phostent;
    sip:string;
    begin
      dd:=GetHostByName(pchar(iplist.Items[iplist.ItemIndex]));
        with dd^ do
         sIP := Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]);
       showmessage(sip);   //可以是   计算机名或地址
    end;