首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSNetServiceBrowser didRemoveService打开流后花费的时间更长

NSNetServiceBrowser didRemoveService打开流后花费的时间更长
EN

Stack Overflow用户
提问于 2011-08-23 13:38:15
回答 2查看 1.5K关注 0票数 7

我有以下代码来发现网络上的服务:

代码语言:javascript
复制
[netServiceBrowser setDelegate: self]; 
[netServiceBrowser searchForServicesOfType: serviceType inDomain: domain];

这将导致对这两个方法(查找服务和删除服务)的调用:

代码语言:javascript
复制
- (void) netServiceBrowser:(NSNetServiceBrowser*) netServiceBrowser 
         didFindService:(NSNetService*) netService ... {}

- (void) netServiceBrowser:(NSNetServiceBrowser*) netServiceBrowser 
         didRemoveService:(NSNetService*) netService ... {}

这个很好用。当我关闭设备时,我立即接收didRemoveService呼叫。

但是,当我打开到设备的流(输入、输出或两者)时:

代码语言:javascript
复制
[netService getInputStream: &inputStream outputStream: &outputStream];

[inputStream setDelegate: self];
[outputStream setDelegate: self];

[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
             forMode: NSDefaultRunLoopMode];
[inputStream open];

[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
              forMode:NSDefaultRunLoopMode];
[outputStream open];

突然,NSNetServiceBrowser用了将近一分钟的时间才发现我关掉了设备。

(调用didRemoveService需要一分钟的时间)。

我没有与之通信的设备(打开流)一旦删除它们,仍然会立即调用didRemoveService。

更新:这里有一些与我的问题相关的更多信息。

我对Wireshark进行了跟踪,注意到以下内容:

我在iPad模拟器中启动我的应用程序,应用程序启动一个NSNetServiceBrowser并检测打印机。之后,它打开输入/输出流到设备(通过机场快递,usb)。打印机正在发送状态更新,当我点击应用程序中的测试按钮时,打印机开始打印。在Wireshark中,我看到与打印机的所有通信都如期而至。

现在,当我在iPad上启动完全相同的应用程序时(并让iPad模拟器运行)。应用程序也启动NSNetServiceBrowser,并检测打印机。打印机没有发送状态更新,当我点击测试按钮时,打印机没有打印。在Wireshark,我看到了通讯。打印机或机场接收我的命令并发送一个ACK包。

一旦我杀死了iPad模拟器应用程序,打印机就开始打印我使用iPad发送的命令。似乎打开一个套接字会阻塞所有的bonjour事件,我如何防止这种情况发生?

这里有更多信息:https://devforums.apple.com/message/541436

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-01 02:29:03

这似乎是机场快线的一个限制。

我目前使用GCDAsyncSocket的实现工作得很好,我只需要确保只使用一个套接字来与Airport通信。

我要结束这个问题。

票数 0
EN

Stack Overflow用户

发布于 2011-12-01 12:47:02

我确信它在Lion中不再为NSStreamEventEndEncountered事件调用处理程序。因此,当您确定收到所有数据时,您需要关闭输入流并从循环中删除它。例如,当NSStreamEventHasBytesAvailable发生时。看看它,我想它应该能用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7161867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档