6

iPhone (サーバー) でサービスを公開しようとしましたが、コードがNSNetServiceオブジェクトのデリゲート メソッドに遭遇しました。

-(void)netServiceDidPublish:(NSNetService *)sender

したがって、私のサービス@"_chatty._tcp."は正常に公開されたと思います。次に、別の iPhone (クライアント) でNSNetServiceBrowser、サービスを見つけるために使用しましたが、デリゲート メソッドには実行されませんでした。

-(void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser didFindService:(NSNetService *)netService moreComing:(BOOL)moreServicesComing

このサイトで私のケースに関連するいくつかの質問を見つけました。ほとんどの回答は、デリゲート オブジェクトが範囲外かどうかを確認することを思い出させます。次のような別のデリゲートメソッドに遭遇したため、私のデリゲートはうまく機能すると確信しています。

-(void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser

誰かが理由を見つけるのを手伝ってくれますか?

ここに私のコードのいくつかの部分があります:

私はそのようにサービスを開始します:

#define MY_PROTOCOL @"_chatty._tcp."

self.myService = [[NSNetService alloc]
                   initWithDomain:@"" type:MY_PROTOCOL
                   name:@"thaith" port:self.port];

ポートは Browser クラスの特定の listenSocket で初期化されます。

NSNetServiceBrowser* finder = [[NSNetServiceBrowser alloc] init];

//I also retain the finder.
finder.delegate = self;

[finder searchForServicesOfType:MY_PROTOCOL inDomain:@""];
4

4 に答える 4

1

可能な解決策

  1. 両方の WiFi 識別子が同じであることを確認します
  2. 両方が同じ WiFi ネットワークにあることを確認します
  3. 同じクラスとして割り当てられた NSNetServiceBrowser デリゲートを確認します

最後に、サンプルのApple.Developer Witap Applicationをダウンロードし、2 つのデバイスにインストールして、動作をテストして確認します。

于 2012-11-23T10:40:13.080 に答える
0

範囲を狭め、問題の場所を見つけようとします。まず、サービスが正しく公開されているかどうかを調べます。サービスを公開するのと同じローカル ネットワーク内のコンピューターで、Bonjour Browser アプリケーション (インターネットで見つけることができます) を使用します。同じローカル ネットで公開および閲覧していただければ幸いです。Bonjour ブラウザがサービスを認識できる場合は、サービスが正しく公開されていることがわかります。次に、ブラウザ側で接続します。

于 2012-11-23T10:23:54.057 に答える