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. 在 UI中列出服务UITableView,以允许用户选择服务
  4. 当用户选择服务时,将服务的委托设置为我的客户端对象,然后调用getInputStream:outputSteam:服务
  5. 在 getInputStream:outputSteam: 返回成功后,我希望didAcceptConnectionWithInputStream:outputStream:被调用。然而,这不会发生。

谢谢你的帮助!

4

3 回答 3

1

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

服务可用后,您调用获取流

[service getInputStream:&istream outputStream:&ostream]

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

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

将被调用

于 2015-02-25T20:22:56.250 回答
1

根据我的经验,调用服务器的行为并不是调用getInputStream:outputStream:客户端的行为didAcceptConnectionWithInputStream:outputStream:

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

于 2015-10-14T23:20:51.577 回答
0

这都是惰性初始化的一部分。

调用getInputStream:outputStream:会给你两个非常好的 NSStreams 准备好使用。所以,比如说,你想写一些数据?首先,打开写流...

砰! netService:didAcceptConnectionWithInputStream:outputStream:叫做。

于 2015-09-04T23:03:55.337 回答