Das Thema gab es zwar schon 1000 Mal, aber das Beispiel:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| 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; |
ist extreem langsam
Gibt es nicht eine performantere Lösung, z.B. ein Table mit allen bekannten Hosts, inkl. IP's aus welchem man dann den entspr. Eintrag zurückgibt?
Die o.g. Funktion benötigt jedenfalls z.T. mehrere Sekunden, vor allem dann, wenn kein Hostname verfügbar ist! Ausserdem kann diese Funktion keine Namn von Printservern auflösen, was Windows selbst aber hinbekommt (Netzwerkumgebung!)...