2つのiOSデバイスがBonjourAPIを使用してお互いを正常に検出していますが、両方が同時に公開と閲覧を行っているため、利用可能なサービスのリストにも表示されます。各エンドポイントがサービスが独自のものであると判断し、リストから除外するために使用できる情報が少しあるはずです...私はどこかでそれを見逃したと確信しています-何かアイデアはありますか?
いくつかの小さな変更を加えて、ドキュメントの例を使用しました。
2つのiOSデバイスがBonjourAPIを使用してお互いを正常に検出していますが、両方が同時に公開と閲覧を行っているため、利用可能なサービスのリストにも表示されます。各エンドポイントがサービスが独自のものであると判断し、リストから除外するために使用できる情報が少しあるはずです...私はどこかでそれを見逃したと確信しています-何かアイデアはありますか?
いくつかの小さな変更を加えて、ドキュメントの例を使用しました。
mDNSは、デバイスの境界を区別しません。リンクローカルネットワーク上のすべてのmDNSリゾルバーは、発信元に関係なく、デフォルトで送信されるすべてのマルチキャストパケットをリッスンします。224.0.0.251
栄光の短波ラジオと考えてください。まあ、ちょっと。
つまり、サービスを参照するときに、NSNetServiceBrowserはホストを区別しません(サーバー側のアプリケーションで便利な機能であることがわかった場合もあります)。
自分のサービスを無視する最も簡単な方法は、コールバックで返されるオブジェクトが自分のものではないことを確認してhostname
から、必要な処理を行うことをお勧めします。NSNetService
netServiceBrowser:didFindService:moreComing:
私はIOS8.1を使用していますが、同じ質問がありました。最終的に、didFindServiceによって返された各サービスの名前を、bonjourサーバーを表すローカルNSNetServiceの名前と比較しました。
アプリのデバッグに基づいて、サービスが解決されるまで、各NSNetServiceのホスト名はnilです。私の場合、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];
}
}