一种从Bonjour搜索结果中排除self的方法

时间:2012-07-26 20:42:49

标签: ios cocoa-touch bonjour

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

2 个答案:

答案 0 :(得分:2)

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

-(void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser didFindService:(NSNetService *)netService moreComing:(BOOL)moreComing
{
    if ([netService isEqual:self.publishedNetService])
        return;
    …
}

答案 1 :(得分:0)

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

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

当然,在UI中显示发现的服务名称时,我会跳过标签字符后的部分。