2010-08-08 79 views
5

我目前使用此代码替代NSHost在iPhone应用程序

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

以检索一个网络应用程序我的工作我的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"); 
} 

我已经去除了四号线的建议(如我已经从其他地方获得这些信息),但是我得到的错误是基于CFHostRef未声明的。我将如何解决这个问题?这似乎是我唯一的大障碍,因为其他错误只是基于缺少能够在此之后看到hostRef。 编辑:划痕,我也得到kCFHostAddresses未申报。

回答

6

您可以使用CFHost来实现相同。在CFHost Reference的顶部是用于查找的食谱配方。

下面的代码非常,非常基本的同步分辨率(因为你上面会用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 
+0

你可以提供一个更具体的食谱方向吗?我无法弄清楚我正在看哪个位(不是在一分钟内坐在我的机器前面,所以很难看到我的代码的剩余部分) – David26th 2010-08-08 14:29:17

+0

上面编辑了一个非常简单的同步示例(除非你想要你的UI冻结,否则你绝对不应该使用它)。 – puzzle 2010-08-08 15:13:32

+0

发现这对Bonjour广告服务有帮助。无法完全适用于NSHost所做的手动输入IP。 – David26th 2010-08-10 18:00:24

0
+0

卧龙岗在明天实施这个计划时,我有我的笔记本电脑。现在在我的ipad环上工作。 – David26th 2010-08-08 14:29:44

+0

请注意,这是为了获取iPhone自己的IP地址,而您似乎正在寻找解析主机名,至少从我如何阅读您的问题。 – puzzle 2010-08-08 14:57:35

+0

其实你可能是在这里xtina的东西。在收到苹果拒绝后,我只回头查看我的代码,因此可能需要检查。如果我想解析主机名,我该怎么做? – David26th 2010-08-08 15:01:34