我使用以下代码,结果是正确的。我在只有 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 服务,看看是否有不同。