Objective c NSNetService工作正常,但可以';无法获取主机名,请解决导致错误的原因
我正在使用Bonjour和NSNetService从我的iPhone发布服务器。一切正常,我可以浏览我正在服务的页面等。但是,在iPhone上,我想显示主机名(即URL,如“myDevice.local.”),这样人们也可以在浏览器中手动输入地址(对于缺少bonjour发现服务的客户很有用)。我的理解是,调用方法[myNetService hostName]应该给我这个地址。但是,此调用始终返回nil。我在某个论坛上读到,我应该首先解析服务,但是[myNetService resolve]和[myNetService resolveWithTimeout:10]都调用委托方法Objective c NSNetService工作正常,但可以';无法获取主机名,请解决导致错误的原因,objective-c,ios,bonjour,hostname,nsnetservice,Objective C,Ios,Bonjour,Hostname,Nsnetservice,我正在使用Bonjour和NSNetService从我的iPhone发布服务器。一切正常,我可以浏览我正在服务的页面等。但是,在iPhone上,我想显示主机名(即URL,如“myDevice.local.”),这样人们也可以在浏览器中手动输入地址(对于缺少bonjour发现服务的客户很有用)。我的理解是,调用方法[myNetService hostName]应该给我这个地址。但是,此调用始终返回nil。我在某个论坛上读到,我应该首先解析服务,但是[myNetService resolve]和[m
- (void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict;
带着错误
{
NSNetServicesErrorCode = -72003;
NSNetServicesErrorDomain = 10;
}
这显然意味着它已经解决了。同样,所有这些都是在我可以使用服务的时候发生的。我还可以得到端口、域和服务的类型。唯一奇怪的是调用[myNetService addresses]返回一个空数组
我使用的是SDK 3.1.3。有人知道我做错了什么吗?您可以通过[[NSProcessInfo processInfo]hostname]获取主机名,而无需解析刚刚发布的netservice。由于两个原因,
[[NSProcessInfo processInfo]hostname]
方法对我没有用处:
- 如果celular数据处于活动状态,它会在我的提供商的域中返回一些奇怪的主机名
- 如果只有WiFi,主机名可以,但都是小写
+ (NSString *) hostname
{
char baseHostName[256];
int success = gethostname(baseHostName, 255);
if (success != 0) return nil;
baseHostName[255] = '\0';
#if !TARGET_IPHONE_SIMULATOR
return [NSString stringWithFormat:@"%s.local", baseHostName];
#else
return [NSString stringWithFormat:@"%s", baseHostName];
#endif
}
请查看此链接:
这表示您的错误,因为它仍在尝试解决该服务:
非常感谢,这解决了我的问题!我不知道我怎么会错过那种方法。我仍然想知道为什么另一种方法会失败。AcDcP有更好的答案——不仅是因为下面指出的原因,而且因为(正如我发现的困难的方式)NSProcessInfo主机名调用和阻塞很长一段时间。这可能会导致应用程序被锁定,或者(如果在启动过程中提前查找主机名)由于启动超时而被iOS杀死。