怎么做didAcceptConnectionWithInputStream:outputStream:get?

时间:2014-05-08 01:59:14

标签: ios networking bonjour connection nsnetservice

我的第一个问题是如何让didAcceptConnectionWithInputStream:outputStream:中的NSNetServiceDelegate回调才能被调用?

跟进问题:我是否仍然可以在客户端和服务器之间建立连接,但我从来没有收到过关于接受连接的回调(通过didAcceptConnectionWithInputStream:outputStream:)?

我理解调用publishWithOptions,而传入NSNetServiceListenForConnections选项应该会导致调用NetServiceDelegate回调(didAcceptConnectionWithInputStream:outputStream:)。但是,该回调没有被调用。

以下是我要采取的步骤:

  1. 使用

    创建NSNetService

    self.netService = [[NSNetService alloc] initWithDomain:@"" 类型:_serviceType name:(_ name == nil)? @"" : _名称 端口:0];

  2. 在当前的runloop中以默认模式安排服务

  3. 将委托设置为我的服务器包装器对象
  4. 致电publishWithOptions:NSNetServiceListenForConnections
  5. 以下是我采取的浏览服务的步骤:

    1. 创建NSNetServiceBrowser,并将其委托设置为我的客户端包装器对象
    2. searchForServicesOfTypeNSNetService
    3. 相同的服务类型和域称为UITableView
    4. 列出用户界面getInputStream:outputSteam:中的服务,以允许用户选择服务
    5. 当用户选择服务时,将服务的委托设置为我的客户端对象,并在服务上调用didAcceptConnectionWithInputStream:outputStream:
    6. getInputStream:outputSteam:返回成功后,我希望{{1}}被调用。但是这不会发生。
    7. 感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

问题是必须从接受连接的一方调用didAcceptConnectionWithInputStream:outputStream:

一旦服务可用,您就可以调用获取流

[service getInputStream:&istream outputStream:&ostream]

在接收请求的一方发生这种情况时委托方法

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

将被称为

答案 1 :(得分:1)

根据我的经验,不是在客户端调用getInputStream:outputStream:导致在服务器上调用didAcceptConnectionWithInputStream:outputStream:的行为。

在客户端上,在致电getInputStream:outputStream:后,您的客户需要在调用[inputStream open]之前致电[outputStream open]didAcceptConnectionWithInputStream:outputStream:

答案 2 :(得分:0)

它是懒惰初始化的一部分。

调用getInputStream:outputStream:将返回两个非常好的NSStreams准备使用。那么,比方说,你想写一些数据?首先,打开写入流...

BAM! netService:didAcceptConnectionWithInputStream:outputStream:被称为。{/ p>