当同一个应用程序同时充当启用Bonjour的服务和客户端时,在侦听套接字时浏览类似自我的服务,从服务搜索结果中排除自己的好方法是什么?
答案 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中显示发现的服务名称时,我会跳过标签字符后的部分。