【问题标题】:iPhone SDK: Bonjour & NSNetService name != published name?iPhone SDK:Bonjour 和 NSNetService 名称!= 已发布名称?
【发布时间】:2010-05-26 14:39:57
【问题描述】:

在我的 iPhone 应用中,我正在发布 bonjour 服务并使用以下委托方法:

- (void)netServiceDidPublish:(NSNetService *)ns
{
   NSLog(@"Bonjour Service Published: http://%@.%@", [ns name], [ns domain]);
}

“name”属性返回的是正确的设备名称“How's Testing”。但是,当我使用 Safari 发现可用服务时,名称是“hows-testing”——服务是http://hows-testing.local.:somePortNumber

为什么发布的名称与 NSNetService 报告的名称不同?如何显示已发布服务的实际名称?假设由于某种原因,无法从对象中获取已发布的名称,我该如何自己确定呢?我知道它是基于设备名称的,但是替换规则是什么?删除撇号,用破折号替换空格......还有什么?特殊字符呢?

【问题讨论】:

  • 您好。你解决了吗?我遇到了完全相同的问题,我有像“Dave's iPhone”这样的主机名字符串,但我想将其转换为主机名,在这种情况下为:“daves-iphone”。我可以做字符替换,但我敢肯定有更优雅的方式!如果您发布您的解决方案,我将不胜感激。谢谢!

标签: iphone cocoa bonjour


【解决方案1】:

我相信“hows-testing”是计算机的主机名,而不是服务的名称。相反,您想查看 hostName 属性:

- (void)netServiceDidPublish:(NSNetService *)ns
{
   NSLog(@"Bonjour Service Published: http://%@", [ns hostName]);
}

如果端口不是该协议的默认端口(HTTP 为 80),您可能还应该检查 port 属性,并将其包含在 URL 中

【讨论】:

  • 我试过这个,hostNamenetServiceDidPublish 中是nil。我相信 hostName 属性是在netServiceDidResolveAddress 中用于客户端,而不是服务器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
相关资源
最近更新 更多