1

私の最初の質問は、どのようにdidAcceptConnectionWithInputStream:outputStream:コールバックNSNetServiceDelegateを取得して呼び出されるのですか?

フォローアップの質問: クライアントとサーバー間の接続を確立できますdidAcceptConnectionWithInputStream:outputStream:か?

publishWithOptionsを呼び出すと、NSNetServiceListenForConnectionsオプションを渡すとNetServiceDelegateコールバック ( didAcceptConnectionWithInputStream:outputStream:) が呼び出されることになっていることを理解しています。ただし、そのコールバックは呼び出されません。

公開するために私が取っている手順は次のとおりです。

  1. NSNetServiceで作成

    self.netService = [[NSNetService alloc] initWithDomain:@"" type:_serviceType name:(_name == nil) ? @"" : _name ポート:0];

  2. デフォルトモードで、現在のランループでサービスをスケジュールする

  3. デリゲートをサーバー ラッパー オブジェクトに設定する
  4. 電話publishWithOptions:NSNetServiceListenForConnections

サービスを閲覧するために私が取る手順は次のとおりです。

  1. を作成しNSNetServiceBrowser、そのデリゲートをクライアント ラッパー オブジェクトに設定します
  2. searchForServicesOfTypeと同じサービス タイプとドメインを呼び出すNSNetService
  3. UITableViewユーザーがサービスを選択できるように、UI にサービスをリストします。
  4. ユーザーがサービスを選択したら、サービスのデリゲートをクライアント オブジェクトに設定し、サービスを呼び出しますgetInputStream:outputSteam:
  5. getInputStream:outputSteam: が成功を返した後、呼び出されることを期待didAcceptConnectionWithInputStream:outputStream:します。ただし、これは発生しません。

ご協力いただきありがとうございます!

4

3 に答える 3

1

私の経験では、サーバー上で呼び出されるgetInputStream:outputStream:のは、クライアント上で呼び出す行為ではありませんdidAcceptConnectionWithInputStream:outputStream:

クライアントでは、 を呼び出した後、 が呼び出される前に、getInputStream:outputStream:クライアントが呼び出す必要が[inputStream open]あります。[outputStream open]didAcceptConnectionWithInputStream:outputStream:

于 2015-10-14T23:20:51.577 に答える
1

問題はdidAcceptConnectionWithInputStream:outputStream:、接続を受け入れる側から呼び出す必要があることです。

サービスが利用可能になったら、get ストリームを呼び出します

[service getInputStream:&istream outputStream:&ostream]

これがリクエストを受信する側で発生すると、デリゲートメソッド

- (void)netService:(NSNetService *)sender didAcceptConnectionWithInputStream:(NSInputStream *)inputStream outputStream:(NSOutputStream *)outputStream 

と呼ばれます

于 2015-02-25T20:22:56.250 に答える