【问题标题】:How to discover network devices with Cocoa Touch?如何使用 Cocoa Touch 发现网络设备?
【发布时间】:2010-06-19 16:29:50
【问题描述】:

我希望能够从运行 iPhone OS 3.x (iPhone/iPad) 的设备枚举本地网络上的设备名称。 我曾尝试使用 NSNetServiceBrowser 来查找所有类似的服务:

[serviceBrowser searchForServicesOfType:@"_services._dns-sd._udp." inDomain:@"local."];

这会返回结果,但是当我尝试解决地址时,我会收到以下错误

NSNetServicesErrorCode = -72004;
NSNetServicesErrorDomain = 10;

我查看了错误,似乎有一个错误的论点?

[kCFNetServiceErrorBadArgument
A required argument was not provided or was not valid.]

如果我进行特定于服务的搜索,例如 [serviceBrowser searchForServicesOfType:@"_ipp._tcp." inDomain:@""]; 分辨率工作正常。

那么,我是否在使用 NSNetServiceBrowser 的正确轨道上,或者是否有其他方法可以让我枚举连接到我的网络的设备的名称?

【问题讨论】:

  • 有什么消息吗?我很想知道你是如何解决上述问题的。
  • 我遇到了完全相同的问题。有什么补救措施?

标签: iphone objective-c cocoa-touch networking


【解决方案1】:

这是正确的做法。可能,您拥有 NSNetServicesBadArgumentError 的原因是因为您的 serviceType 字符串 @"_services._dns-sd._udp." 无效尝试 @"_services._dns-sd._udp",即没有尾随句点。

Apple 的文档在这一点上令人困惑。在NSNetServiceBrowser Class Reference 中声明:

serviceType 参数必须同时包含服务类型和传输层信息。为确保 mDNS 响应程序搜索服务而不是主机,请确保在服务名称和传输层名称前加上下划线字符 (“_”)。例如,要在 TCP 上搜索 HTTP 服务,您将使用类型字符串“_http._tcp.”。 请注意末尾的句点字符是必需的。

但是,在NSNetServices and CFNetServices Programming Guide 中,初始化浏览器并开始搜索的示例显然没有在末尾使用句点:

serviceBrowser = [[NSNetServiceBrowser alloc] init];
[serviceBrowser setDelegate:delegateObject];
[serviceBrowser searchForServicesOfType:@"_music._tcp" inDomain:@""];

试一试,看看你有没有运气。

【讨论】:

  • 我遇到了完全相同的问题,在我的情况下,删除“尾随”期间并不能解决问题。怎么办?
猜你喜欢
  • 2011-10-11
  • 1970-01-01
  • 2012-02-18
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多