Tôi đang tìm cách giải quyết tên máy chủ của một thiết bị trong mạng LAN từ địa chỉ IP của nó trên mạng LAN này.cách phân giải tên máy chủ từ địa chỉ IP trong iOS Mục tiêu-C
Tôi đã viết một chương trình trong C hoạt động hoàn hảo trên Linux bằng cách sử dụng hàm gethostbyaddr().
Khi tôi thử trên OS X hoặc iOS, tính năng này không hoạt động.
Dường như có sự cố với gethostbyaddr() trong OS X và iOS.
Dù sao, nếu bạn có ý tưởng khác để nhận tên máy chủ từ xa từ IP của nó trong iOS, nó sẽ làm cho ngày của tôi.
Đây là mã tôi đã sử dụng:
Đầu tiên kiểm tra:
192.168.0.101 là địa chỉ ip của máy mà chúng tôi đang truy vấn cho hostname.
#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);
Mã này hoạt động tốt trên Linux nhưng không hoạt động trên OS X hoặc iOS.
thử nghiệm thứ hai: stucks
+ (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;
}
Mã này tại CFHostStartInfoResolution trở về con số không vào thời điểm này.
Thx trước.
Tôi nghĩ bạn muốn có API CFHost, hãy xem [this] (http://blog.toshsoft.de/index.php?/archives/5-3-Ways-to-Resolve-a-Hostname- trong-iOS.html) – Jonathan
Tôi đã thử với CFHost API, cùng một vấn đề khi tôi cố gắng truy xuất lại tên máy chủ từ một địa chỉ IP hiện có trên mạng, yêu cầu đã hết thời gian chờ. Nhưng khi tôi cố gắng giải quyết 127.0.0.1 đó là add localhost, nó hoạt động. – taredhot
bạn có giải quyết được sự cố không? Tôi nhận được cùng một giá trị nil @taredhot –