2014-09-05 227 views
1

我有点新的Objective-C /可可,我正在努力编写一个bonjour服务器客户端应用程序。 由于我没有太多经验,如果您的回复也可以包含关于如何操作的解释,而不仅仅是代码,我将不胜感激。如何在客户端断开连接时获取NSNetService通知?

我设法使用服务器的netService:didAcceptConnectionWithInputStream:outputStream方法在服务器和客户端之间建立连接和输入输出流。

事情是,我希望服务器有一个所有连接客户端的列表。 我知道客户端的NSNetServiceBrowserDelegate有一个方法,在与bonjour服务的连接结束时会被吊销, 但我无法找到一个与我在服务器端可以使用的NSNetServiceDelegate相同的方法来运行适当的客户端断开连接时的代码。

+0

这就是关于那个点的流。 – uchuugaka 2014-09-05 09:41:05

+0

是不是有一种“活”的方式来知道?我的意思是,如果我指望流,唯一一次我知道客户端断开连接的时候是我尝试使用他的流时。 – AMI289 2014-09-05 14:35:14

回答

0

查看Stream Programming Guide。 基本上,你将使用NSStream(或它的一个子类),你需要创建一个委托给你的流。 流代表应该处理的一种方法 - 流:为handleEvent: 这个方法是一个回调,会给你NSStreamStatus下列指示(一个通过typedef NSUInteger)的一个

typedef enum { 
    NSStreamStatusNotOpen = 0, 
    NSStreamStatusOpening = 1, 
    NSStreamStatusOpen = 2, 
    NSStreamStatusReading = 3, 
    NSStreamStatusWriting = 4, 
    NSStreamStatusAtEnd = 5, 
    NSStreamStatusClosed = 6, 
    NSStreamStatusError = 7 
}; 

在您的实现委托方法你基本上创建一个switch-case语句,它可以做任何你需要做的事情来响应这个变化。

+0

谢谢你的回复。我已经尝试过,在netService:didAcceptConnectionWithInputStream:outputStream:我将inputStream.delegate和outputStream.delegate设置为self,但是stream:handleEvent:方法的非回调被取消。也许它与自动回收有关? – AMI289 2014-09-06 08:57:27

+0

如果我没有记错,可能有NSStream API需要在同一个线程或runloop上的事情。我忘了。 CFStream更难但更灵活和线程安全。但是你可以通过查找一些有效的示例代码来分解它。它确实有效,你只是在某处丢失了某些东西。 – uchuugaka 2014-09-06 09:14:05

+0

如果我创建一个包含流数据的新类,我已经设法让委托工作。但除了NSStreamStatusOpen和NSStreamStatusClosed之外,没有方法被调用。在Xcode的文档中,NSStream的typedef与您发布的不同。 – AMI289 2014-09-14 14:34:51

相关问题