Apple Bonjour:我怎么能知道哪项发布的服务是我自己的



我有两台iOS设备使用Bonjour API成功找到对方,但由于它们都是同时发布和浏览的,因此它们也会出现在可用服务列表中。每个端点都必须有一些信息可以用来确定服务是他们自己的,并将其从列表中排除。。。我确信我只是在某个地方错过了——有什么想法吗?

我使用了文档中的示例,并做了一些小的更改。

mDNS不会对设备边界进行任何区分-链路本地网络上的每个mDNS解析程序都会侦听默认情况下发送到224.0.0.251的所有多播数据包,无论其来源如何。把它想象成一台荣耀的短波收音机。嗯,有点。

这意味着当您浏览服务时,NSNetServiceBrowser不会区分主机(有时我发现这在服务器端应用程序中是一个有用的功能(。

我建议忽略您自己的服务的最简单方法是,在对netServiceBrowser:didFindService:moreComing:回调中返回的NSNetService对象的hostname执行任何需要的操作之前,检查它是否不是您的。

我使用的是IOS 8.1,我也有同样的问题。最后,我将didFindService返回的每个服务的名称与代表我的bonjour服务器的本地NSNetService的名称进行了比较。

根据我在调试应用程序时看到的情况,在解决服务之前,每个NSNetService的主机名都为零。在我的情况下,我没有在didFindService中调用resolveWithTimeout,因为我想显示数据会花费太长时间。

根据接受的答案提示,将NSNetService名称与设备名称进行比较:

- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing
{
    // Ignore the local device if specified
    if ([aNetService.name isEqualToString:UIDevice.currentDevice.name])
    {
        NSLog(@"NETSERVICE: Ignoring NetService for self: '%@'", aNetService.name); 
    }
    else
    {
        ...
    }
    // If that's it then stop the browser (it's manually controlled)
    if (!moreComing) {
        [_netBrowser stop];
    }
}

相关内容

  • 没有找到相关文章