Objective c 如何在客户端断开连接时获取NSNetService通知?

Objective c 如何在客户端断开连接时获取NSNetService通知?,objective-c,cocoa,nsnetservice,Objective C,Cocoa,Nsnetservice,我是Objective-C/Cocoa的新手,我正在尝试编写一个bonjour服务器客户端应用程序。 因为我没有太多的经验,如果您的回复中能包括关于如何操作的解释,而不仅仅是代码,我将不胜感激 我使用服务器的netService:didAcceptConnectionWithInputStream:outputStream方法在服务器和客户机之间建立连接和输入输出流 问题是,我希望服务器有一个所有连接客户端的列表。 我知道客户端的NSNetServiceBrowserDelegate有一个方法,

我是Objective-C/Cocoa的新手,我正在尝试编写一个bonjour服务器客户端应用程序。 因为我没有太多的经验,如果您的回复中能包括关于如何操作的解释,而不仅仅是代码,我将不胜感激

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

问题是,我希望服务器有一个所有连接客户端的列表。 我知道客户端的NSNetServiceBrowserDelegate有一个方法,只要与bonjour服务的连接结束,该方法就会被撤销,
但是我找不到一个与
NSNetServiceDelegate
相同的方法,我可以在服务器端使用它,在客户端断开连接时运行适当的代码。

查看流编程指南。 基本上,您将使用NSStream(或其子类),并且需要创建一个委托并将其分配给您的流。 流委托应处理一个方法–stream:handleEvent: 该方法是一个回调,它将为您提供以下NSStreamStatus指示之一(类型定义的整数)


在委托方法的实现中,您基本上创建了一个switch case语句,该语句执行您需要执行的任何操作以响应更改。

此时的所有操作都是关于流的。难道没有一种“实时”的方法来了解这一点吗?我的意思是,如果我使用流,我唯一能知道客户已经断开连接的时候就是我尝试使用他的流。谢谢你的回复。我在netService:didAcceptConnectionWithInputStream:outputStream上尝试了这一点:我将inputStream.delegate和outputStream.delegate设置为self,但流中的非:handleEvent:方法被撤销。也许它与自动释放有关?如果我没记错的话,可能有一件事NSStream API需要在同一个线程或运行循环上。我忘了。CFStream更难,但更灵活且线程安全。但是您可以通过查找一些工作示例代码来分解它。如果我创建了一个保存流数据的新类,我已经设法让委托工作。但是除了NSStreamStatusOpen和NSStreamStatusClosed之外,没有调用任何方法。在Xcode的文档中,NSStream的typedef与您发布的不同。这是从文档中得到的。标题可能已经更新,文档可能还没有更新。另一种常见但更具挑战性的方法是使用CFStream或其他流行的开源库,如AFNetworking或AsyncSocket。
typedef enum {
   NSStreamStatusNotOpen = 0,
   NSStreamStatusOpening = 1,
   NSStreamStatusOpen = 2,
   NSStreamStatusReading = 3,
   NSStreamStatusWriting = 4,
   NSStreamStatusAtEnd = 5,
   NSStreamStatusClosed = 6,
   NSStreamStatusError = 7
};