将某一主机域名解析为IP地址。
使用 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;

解决方案 »

  1.   

    真笨。用UDPSOCK这个控件设置相关的属性就可以拉,我用的是DELPHI6,你可以回去试试。
      

  2.   

    unit UnitDNS;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, TB97,Winsock;type
      TFormMain = class(TForm)
        Label1: TLabel;
        Label2: TLabel;
        EditPresentation: TEdit97;
        EditResult: TEdit97;
        BtnGetHostByName: TToolbarButton97;
        Label3: TLabel;
        edtHost: TEdit97;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure BtnGetHostByNameClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      FormMain: TFormMain;implementation{$R *.DFM}procedure TFormMain.FormCreate(Sender: TObject);
    Var
       WSAData:TWSAData;
    begin
         //initiates use of WS2_32.DLL
         if (WSAStartup(MAKEWORD(2,0),WSAData)<>0) then
            raise Exception.Create('Winsock Version Error');
    end;procedure TFormMain.FormDestroy(Sender: TObject);
    begin
         WSACleanUP;
    end;
    procedure TFormMain.BtnGetHostByNameClick(Sender: TObject);
    var
       Host: pHostent;
       ConsultResult:String;
       Err:Integer;
    begin
         Try
            Host := GetHostByName(PChar(EditPresentation.Text));
         Except
            Err:=WSAGetLastError();
            EditResult.Text:='Error Code:'+InttoStr(Err);
            Exit;
         end;
         if Host=NIL then
         begin
            EditResult.Text:='Host does not exist';
            exit;
         end;
         ConsultResult:=Copy(Host.h_addr^,0,4);
         EditResult.Text:=Format('%d.%d.%d.%d',
                                  [ord(ConsultResult[1]),
                                   ord(ConsultResult[2]),
                                   ord(ConsultResult[3]),
                                   ord(ConsultResult[4])]);
         edtHost.Text:=Host.h_name;
    end;end.
      

  3.   

    最简单的方法,1.调用控件NMFTP的方法nmftp1.address;//这里具体是什么我不清楚了,如果不是的话你自己试试吧。2.或者如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    wVersionRequested : WORD;
    wsaData : TWSAData;
    p : PHostEnt;
    s : array[0..128] of char;
    p2 : pchar;
    begin
    {Start up WinSock}
    wVersionRequested := MAKEWORD(1, 1);
    WSAStartup(wVersionRequested, wsaData); 
    {Get the computer name}
    GetHostName(@s, 128);
    p := GetHostByName(@s);{Get the IpAddress}
    p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);edit1.text:=format('%s',[p2]);
    end;