Ich suche nach einer Möglichkeit, den Hostnamen eines Geräts in meinem LAN von seiner IP-Adresse in diesem LAN aufzulösen.Wie Hostname von IP-Adresse in iOS aufzulösen Objective-C
Ich schrieb ein Programm in C, das perfekt auf Linux funktioniert mit gethostbyaddr() -Funktion.
Wenn ich das auf OS X oder iOS versuchte, funktioniert es nicht.
Es scheint ein Problem mit gethostbyaddr() in OS X und iOS.
Wie auch immer, wenn Sie eine andere Idee haben, den Hostnamen des Remote-Rechners von seiner IP in iOS zu bekommen, wird es meinen Tag machen.
Dies ist der Code, den ich verwendet:
Erster Test:
192.168.0.101 ist die IP-Adresse des Rechners, die wir für den Hostnamen abfragen.
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
struct hostent *he;
struct in_addr ipv4addr;
inet_pton(AF_INET, "192.168.0.101", &ipv4addr);
he = gethostbyaddr(&ipv4addr, sizeof ipv4addr, AF_INET);
printf("Host name: %s\n", he->h_name);
Dieser Code funktioniert gut unter Linux, aber nicht unter OS X und iOS.
Zweiter Test:
+ (NSArray *)hostnamesForAddress:(NSString *)address {
// Get the host reference for the given address.
struct addrinfo hints;
struct addrinfo *result = NULL;
memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_NUMERICHOST;
hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = 0;
int errorStatus = getaddrinfo([address cStringUsingEncoding:NSASCIIStringEncoding], NULL, &hints, &result);
if (errorStatus != 0) return nil;
CFDataRef addressRef = CFDataCreate(NULL, (UInt8 *)result->ai_addr, result->ai_addrlen);
if (addressRef == nil) return nil;
freeaddrinfo(result);
CFHostRef hostRef = CFHostCreateWithAddress(kCFAllocatorDefault, addressRef);
if (hostRef == nil) return nil;
CFRelease(addressRef);
BOOL isSuccess = CFHostStartInfoResolution(hostRef, kCFHostNames, NULL);
if (!isSuccess) return nil;
// Get the hostnames for the host reference.
CFArrayRef hostnamesRef = CFHostGetNames(hostRef, NULL);
NSMutableArray *hostnames = [NSMutableArray array];
for (int currentIndex = 0; currentIndex < [(NSArray *)hostnamesRef count]; currentIndex++) {
[hostnames addObject:[(NSArray *)hostnamesRef objectAtIndex:currentIndex]];
}
return hostnames;
}
Dieser Code stuck bei CFHostStartInfoResolution Null an dieser Stelle zurück.
Danke im Voraus.
Ich denke, dass Sie die CFHost API wollen, überprüfen Sie [diese] (http://blog.toshsoft.de/index.php?/archives/5-3-Ways-to-Resolve-a-Hostname- in-iOS.html) – Jonathan
Ich versuchte mit CFHost API, das gleiche Problem, wenn ich versuche, den Hostnamen von einer bestehenden IP-Adresse im Netzwerk retrive, die Anfrage abgelaufen. Aber wenn ich versuche, 127.0.0.1, die die localhost Adressen ist, zu lösen, funktioniert es. – taredhot
haben Sie das Problem gelöst? Ich bekomme den gleichen Nullwert @taredhot –