我的第一个问题是如何让didAcceptConnectionWithInputStream:outputStream:
中的NSNetServiceDelegate
回调才能被调用?
跟进问题:我是否仍然可以在客户端和服务器之间建立连接,但我从来没有收到过关于接受连接的回调(通过didAcceptConnectionWithInputStream:outputStream:
)?
我理解调用publishWithOptions
,而传入NSNetServiceListenForConnections
选项应该会导致调用NetServiceDelegate
回调(didAcceptConnectionWithInputStream:outputStream:
)。但是,该回调没有被调用。
以下是我要采取的步骤:
使用
创建NSNetService
self.netService = [[NSNetService alloc] initWithDomain:@"" 类型:_serviceType name:(_ name == nil)? @"" : _名称 端口:0];
在当前的runloop中以默认模式安排服务
publishWithOptions:NSNetServiceListenForConnections
以下是我采取的浏览服务的步骤:
NSNetServiceBrowser
,并将其委托设置为我的客户端包装器对象searchForServicesOfType
与NSNetService
UITableView
getInputStream:outputSteam:
中的服务,以允许用户选择服务didAcceptConnectionWithInputStream:outputStream:
感谢您的帮助!
答案 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>