2010-08-10 194 views
4

我使用下面的代碼,結果是正確的,但gethostbyaddr大約需要30秒。gethostbyaddr太慢

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; 

問候 艾倫

+2

這通常是一個DNS問題。 – sje397 2010-08-10 07:35:52

+0

通常情況,是的,但是直到我們從代碼中獲得時間後,我們才肯定知道。否則,我會馬上將它推到SU上。 – paxdiablo 2010-08-10 07:42:30

+0

比較'nslookup'和這個調用,看它是否有很大的不同。如果沒有,那肯定是一個DNS問題。 – 2010-08-15 13:30:44

回答

1

Windows根據主機和LAN的配置方式,嘗試使用不同方法執行主機名解析。見http://technet.microsoft.com/en-us/library/bb727005.aspx。 您不應該在未正確配置的局域網中使用DNS服務器(或至少一個WINS服務器)或正確的主機文件來測試該代碼。否則,您無法在正確配置的LAN中獲得您期望的結果。