NSNetService工作正常,但不能得到hostName,解决导致错误
我使用Bonjour与NSNetService从我的iPhone发布服务器。 这一切都按预期工作,我可以浏览我正在服务的网页等。但是,在iPhone上,我想显示主机名称(即URL,如“myDevice.local。”),以便还可以input手动在浏览器中的地址(有用的客户端缺lessbonjour发现服务)。 我的理解是调用方法[myNetService hostName]应该给我这个地址。 但是,这个调用总是返回nil。 我读了一些论坛,我首先应该解决的服务,但是[myNetService解决]和[myNetService resolveWithTimeout:10]调用委托方法
- (void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict;
与错误
{ NSNetServicesErrorCode = -72003; NSNetServicesErrorDomain = 10; }
这显然意味着它已经解决了。 所有这一切都发生在我可以使用该服务的时候。 我也可以得到端口,域和服务的types。 唯一奇怪的是,调用[myNetService addresses]返回一个空数组。
我正在使用SDK 3.1.3。 有没有人知道我可能做错了什么?
您可以通过[[NSProcessInfo processInfo] hostName]获取主机名,而无需parsing您刚刚发布的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 }