首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS上的NSNetServiceBrowser/Bonjour问题

iOS上的NSNetServiceBrowser/Bonjour问题
EN

Stack Overflow用户
提问于 2011-10-04 09:11:31
回答 1查看 7.7K关注 0票数 12

我正在为我一直在开发的一个NSNetServiceBrowser项目开发一个应用程序,在WiFi之上使用Bonjour (准确地说,是WiFi)。

然而,尽管注意到在Why does NSNetServiceBrowser find unpublished services in iPhone OS?的出色响应中提出了一些问题,但我仍然在NSNetSericeBrowser方面遇到了一些困难。

我的安排如下:

  • 与运行iOS 4.5.3的iPads一起工作。使用AirPort Express作为访问dns的
  • --连接到网络的Mac上的sd -B _serviceName --工作良好--也就是说,所有发布和停止的调用都会立即反映在桌面上。

然而,我经历了以下问题:-

发布了很长时间的

  1. 服务(大约。)即使客户端从Mac!中消失(即called).
  2. Sometimes不获取网络上其他人看不到的服务,即使它们出现在Mac!上(即未调用didFindService ) --这可能与下面的3/4点有关.这样,如果应用程序在连接到网络之前开始运行(并进行搜索),那么如果一个设备在发布服务后改变网络,它就不会搜索新的网络properly.
  3. What?我发现不是在新的网络上重新发布服务--怎么会强制这样做呢?
  4. ,如果一个设备在搜索服务时改变了网络,会发生什么?我发现这也会导致问题,而且它往往导致会话找不到(didFindService未被调用)。

我遇到的问题很奇怪,因为Bonjour 90%的时间.这仅仅是10%,正在破坏我的应用程序的可靠性!令人讨厌的是,所有上述问题都可以通过双击主页按钮并强制关闭应用程序,然后重新运行来解决。在再次运行它之后,它总是找到正确的会话或正确发布。

避免这个问题的一种方法是在无线网络改变的时候拆除并重新启动NSNetServiceBrowser .但这似乎是非常混乱和不必要的。令人沮丧的是,Bonjour是一个高级别的API,没有任何实际的选项来调整和测试。

有什么办法能解决1-4问题吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-06 10:43:31

好的,我设法解决了这个问题--如果其他人在Bonjour/NSNetServiceBrowser遇到这种可靠性问题时,这里是我的解决方案:

1.将NSNetService和NSNetServiceBrowsers都安排如下:

代码语言:javascript
复制
[netService scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[netServiceBrowser scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

2.确保实现netServiceBrowser:didNotSearch: NSNetServiceBrowserDelegate.中的方法

当NSNetService无法发布时(无论出于什么原因),这将被触发。我所做的就是把一个UIAlertView放在里面,向用户显示一条消息,上面写着搜索不能完成,他们应该检查他们的网络连接。浏览似乎自动重新启动,一旦它能够这样做(但我需要调查这一点,也许是我的代码中的某些东西使它发生.)

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

https://stackoverflow.com/questions/7645613

复制
相关文章

相似问题

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