【问题标题】:Getting the HostName of a Remote iOS Device with NSNetService使用 NSNetService 获取远程 iOS 设备的主机名
【发布时间】:2015-06-24 18:56:48
【问题描述】:

经过几个多小时的搜索,我陷入了死胡同。在这种情况下,我要做的就是使用 Bonjour 获取网络的所有 iOS 设备。我就是这样做的

self.serviceBrowser = [[NSNetServiceBrowser alloc] init];
[self.serviceBrowser setDelegate:self];
[self.serviceBrowser searchForServicesOfType:@"_apple-mobdev2._tcp." inDomain:@"local."];

这很好用,虽然我得到的是以下内容:

local. _apple-mobdev2._tcp. [MAC ADDRESS HERE]

我尝试使用同步端口 (62078) 解析连接,因为 service.port 返回 -1。

for (NSNetService *service in self.services) {
    NSLog(@"%@", service);
        NSNetService *newService = [[NSNetService alloc] initWithDomain:service.domain type:service.type name:service.name port:62078];
        [newService setDelegate:self];
        [newService resolveWithTimeout:30];
}

这本身又调用了 netServiceWillResolve: 一点问题都没有,但是它没有到​​达 netServiceDidResolveAddress:

但这也没有失败。 netService:didNotResolve: 也没有被调用,我相信它只是在等待解决响应。

为了支持这种说法,一旦它确实实现了方法并且实际上是 [service hostName];确实返回了 Yanniss-iPhone,但这发生在完全随机的时间,我让 Mac App 运行了大约半小时。什么可以调用它来运行?或者有人知道获取远程设备主机名的不同方法吗?其他答案没有回答我的问题,因为我正在寻找远程设备的主机名,而不是 Mac 设备的主机名。

相对于此,我发现当您杀死并重新启动 iTunes 以及 iTunes Helper 时,我在下面提到的日志会再次发送。这就是为什么我认为正确的日志是与 iTunes 相关的事件。非常感谢任何帮助!

【问题讨论】:

    标签: ios objective-c cocoa bonjour nsnetservice


    【解决方案1】:

    iTunes 搜索 bonjour 以获得 wifi 同步功能。至于 didNotResolve 或 resolve 延迟,bonjour 服务会在几秒到 30 分钟之间随机投射。

    我实际上也在尝试连接到 iOS 设备,但我无法得到任何响应或返回任何设备。 :\

    【讨论】:

    • 使用 iTunes WiFi Sync,我真的能够做到这一点!我得到了设备名称和 IP 地址。与其创建新服务,不如将循环的服务对象的委托设置为 self 并以 30 的超时时间解析。[service setDelegate:self]; [service resolveWithTimeout:30]; 我发现 iOS 9 和 iOS 8 有不同的端口。所以这就是上面的代码不起作用的原因,它在我的 iOS 8 iPad 上很好,但在我的 iOS 9 beta iPhone 上却不行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    相关资源
    最近更新 更多