gethostbyaddr 太慢

gethostbyaddr 太慢

我使用以下代码,结果是正确的。我在只有 3 台机器的 LAN 上工作。而且该网络未连接到互联网。仅此行就花费了 16 秒

HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);

GetHostByName(PChar(HostName)); is instant (delphitricks.com/source-code/internet/…)

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   
    Result := StrPas(Hostent^.h_name)   
  else   
    Result := '';   
end;   

https://stackoverflow.com/questions/3446879/gethostbyaddr-too-slow

ipcofig /all(从运行 gethostbyaddr 的机器)的结果

Windows IP 配置

        主机名.................:XXX
        主 DNS 后缀 . . . . . . . :
        节点类型....。....。....。....:未知
        IP 路由已启用。。。。。。。:否
        WINS 代理已启用。。。。。。。:否

以太网适配器本地连接:

        连接特定的 DNS 后缀 . :
        描述....。...。...。...。:Realtek RTL8139/810x 系列快速以太网 NIC
        物理地址。。。。。。。。。。。:00-XX-XX-XX-xx-XX
        DHCP 已启用。。。。。。。。。。:否
        IP 地址................................................: 192.168.1.123
        子网掩码.......................................................................................................................: 255.255.255.0
        默认网关................: 192.168.1.1
        DNS 服务器.................: 202.149.208.90
                                            202.149.208.11

答案1

可能是您有两个 DNS 服务器,而第一个服务器无法正常工作,因此您的 Windows 计算机会等待第一个主机超时(10+秒),然后尝试第二个 DNS。尝试将 DNS 更改为其他 DNS,例如某些公共 DNS 服务,看看是否有不同。

相关内容