当然是用程序。有什么想法也可以提

解决方案 »

  1.   

    用这个控件:TIdDNSResolver(Indy控件)
      

  2.   

    我不能用控件,我写的是Dll,替换windows的Dll.
    还有什么办法吗?
      

  3.   

    那么Indy都有有源码的,你把源码拷贝一下不就可以了。
    另外,即使是写DLL,也可以用控件的,控件不过就是一个类罢了,没有什么特殊的地方。
      

  4.   

    <超级猛料>中的
    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;
    DNS: string;
    begin
      DNS := InputBox('输入DNS域名', '主机名称:', '');
      if HostToIp(DNS, IP) then showmessage(IP);
    end;
      

  5.   


    dll也可以加控件啊,甚至窗体将某一主机域名解析为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; 测试时请在在线状态。测试代码:
    var
    IP: string;
    DNS: string;
    begin
      DNS := InputBox('输入DNS域名', '主机名称:', '');
      if HostToIp(DNS, IP) then showmessage(IP);
    end;
      

  6.   

    上面的方法是可以,速度我还是受不了,估计好难解决,
    域名解析就是要慢。我的程序没有办法容忍。
    我的程序装在服务器上,一般一个网吧至少有60田电脑
    多的200-300台,每个电脑算开10个网页,每个网页都有这样的请求
    我的Dll都要处理,那服务器只有死了。我还是老实一点多用一个字段记录
    网站的Ip,然后往列表里面多加入一个网站。
      

  7.   

    可以采用多线程嘛
    而且使用代码生成TIdDNSResolver也不难
    如果用数据库表存储ip,及时更新还是个问题