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,主机名称可以,但全部小写

http://iphoneappcode.blogspot.com/2012/05/how-to-get-device-ipaddess-in-iphone.html下面的代码最适合我,总是返回本地主机名与敏感的情况下:

 + (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 } 
Interesting Posts