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 の MyApp\txYbG56HjaE」のようなものになります。タブ文字の前が表示用、後ろがクッキーです。次に、Cookie をグローバルに表示される変数として保存します。サーバーの初期化はアプリの起動時に行われるため、Cookie の値は早い段階で利用できます。

サービス ディスカバリの部分では、サービスを見つけたら、その名前を確認します。Cookie が保存されているグローバル Cookie と同じ場合は、このサービスをスキップします。プログラムの他の実行中のインスタンスは、ランダムであるため、異なる Cookie 値を持つという考えです。

当然、発見したサービス名をUIに表示する際、タブ文字以降は飛ばします。

于 2013-07-10T12:53:40.180 に答える