gpt4 book ai didi

delphi - gethostbyaddr 太慢

转载 作者:行者123 更新时间:2023-12-03 15:29:49 28 4
gpt4 key购买 nike

我使用以下代码,结果是正确的,但 gethostbyaddr 需要大约 30 秒。

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;

最佳答案

这不太可能是您的代码的问题(除非 WSAStartup 特别慢)。

我要做的第一件事是输出代码中每一行之间的时间(我认为最好是毫秒,使用 GetTickCount),找出时间到底花在哪里。

gethostbyaddr 可能必须转到远程 DNS 计算机才能将 IP 地址解析为主机名。

如果您的网络设置不佳,或者包含该地址的 DNS 服务器位于西藏山区的偏远地区,则解析需要一些时间。

从命令行输入:

nslookup x.x.x.x

(其中 x.x.x.x 是您感兴趣的 IP 地址)并查看需要多长时间。

根据您在下面标尺线之间的评论:

<小时/>

我在 LAN 上工作,只有 3 台机器。此外,该网络未连接到互联网。仅一行就需要 16 秒(+/- 一些毫秒):

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

同时:

GetHostByName(PChar(HostName));

是瞬时的。下面是Ping(即时输出)和nslookup的输出:

c:\> ping 192.168.1.22
Reply from 192.168.1.22: bytes=32 time<1ms TTL=128 Packets:
Sent = 4, Received = 4, Lost = 0 (0% loss)

c:\> nslookup 192.168.1.22
DNS request timed out.
<小时/>

我认为你的问题在于超时。看来您的网络设置可以进行 DNS 名称解析,但不能进行 IP 反向解析。

当您只需输入 nslookup 时,它应该会向您显示它正在尝试使用的 DNS 服务器,这可能会给您提供线索。

c:\pax> nslookup
Default Server: pax01.neveryoumind.com
Address: 9.190.230.75

将名称解析为 IP 地址可能不会通过 DNS 发出,而是使用本地信息进行处理。

这就是我根据当前信息所能为您提供的尽可能多的帮助。由于现在这看起来更像是一个 super 用户问题,而不是 StackOverflow,所以我会将其推到那里。

关于delphi - gethostbyaddr 太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3446879/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com