iPhone应用程序中NSHost的替代品

Dav*_*6th 5 iphone networking iphone-privateapi nshost

我目前正在使用此代码

    NSHost *host = [NSHost hostWithAddress:hostname];
if (host == nil) {
    host = [NSHost hostWithName:hostname];
    if (host == nil) {
        [self setMessage:@"Invalid IP address or hostname:"];
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

检索我正在处理的网络应用程序的IP地址,但是我知道NSHost是一个将被拒绝的私有API.任何人都可以帮助我使用此代码生成相同的结果而不使用NSHost?我不确定从哪里开始.

编辑:

以下建议看起来非常接近完美,我已将此代码添加到我的应用程序中代替上面的代码

    Boolean result;
CFHostRef hostRef;
CFArrayRef addresses;
NSString *hostname = @"www.apple.com";
hostRef = CFHostCreateWithName(kCFAllocatorDefault, (CFStringRef)hostname);
if (hostRef) {
    result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL); // pass an error instead of NULL here to find out why it failed
    if (result == TRUE) {
        addresses = CFHostGetAddressing(hostRef, &result);
    }
}
if (result == TRUE) {
    NSLog(@"Resolved");
} else {
    NSLog(@"Not resolved");
}
Run Code Online (Sandbox Code Playgroud)

我删除了第4行(因为我已经从其他地方获得了这些信息)但是我得到的错误是基于CFHostRef未声明的.我该如何解决?这似乎是我唯一的障碍,因为其他错误只是基于之后无法看到hostRef.编辑:抓住我也得到kCFHostAddresses未声明.

puz*_*zle 6

您可以使用CFHost实现相同的目标.在CFHost参考的顶部是一个用于进行查找的食谱.

以下代码执行非常非常基本的同步解析(如上所述,NSHost).请注意,您不希望这样做,因为它可以使您的应用无响应,因为它在解决或超时命中之前不会返回.

改为使用异步查找(CFHostSetClient和CFHostScheduleWithRunLoop,如上面的CFHost文档中所述).此外,根据您计划执行的操作,您可能需要考虑使用可访问性API.查看iPhone开发人员网站上提供的关于网络的WWDC会议.

Boolean result;
CFHostRef hostRef;
CFArrayRef addresses;
NSString *hostname = @"www.apple.com";
hostRef = CFHostCreateWithName(kCFAllocatorDefault, (CFStringRef)hostname);
if (hostRef) {
    result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL); // pass an error instead of NULL here to find out why it failed
    if (result == TRUE) {
        addresses = CFHostGetAddressing(hostRef, &result);
    }
}
if (result == TRUE) {
    NSLog(@"Resolved");
} else {
    NSLog(@"Not resolved");
}

// Don't forget to release hostRef when you're done with it
Run Code Online (Sandbox Code Playgroud)


Dav*_*6th -3

http://developer.apple.com/iphone/library/qa/qa2009/qa1652.html

通过开发者支持系统得到了一个很好的小答案,这非常有效。