2

当同一个应用程序同时充当启用 Bonjour 的服务和客户端时,在侦听套接字的同时浏览类似自我的服务,有什么好方法可以从服务搜索结果中排除自我?

4

2 回答 2

2

在您的 NSNetServiceBrowserDelegate 中,您只需询问传入服务是否与您发布的服务相同:

-(void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser didFindService:(NSNetService *)netService moreComing:(BOOL)moreComing
{
    if ([netService isEqual:self.publishedNetService])
        return;
    …
}
于 2014-03-30T13:54:02.853 回答
0

在服务器部分,当我向 Bonjour 注册我的服务时,我会生成一个 10 个字符的随机字母数字字符串 - 一个 cookie。我将其作为广告服务名称的一部分,如对[NSNetService initWithDomain:type:name:port:]. 结果名称类似于“Joe 的 iPhone\txYbG56HjaE 上的 MyApp”。制表符之前的部分用于显示,之后的部分是cookie。然后我存储的 cookie 是一个全局可见的变量。由于服务器初始化发生在应用程序启动时,cookie 值在早期可用。

在服务发现部分,当我找到一个服务时,我检查它的名字;如果 cookie 与存储的全局 cookie 相同,我将跳过此服务。这个想法是程序的其他运行实例将具有不同的 cookie 值,因为随机性。

自然,当在 UI 中显示发现的服务名称时,我会跳过制表符后面的部分。

于 2013-07-10T12:53:40.180 回答