问题标签 [nsnetservicebrowser]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2066 浏览

objective-c - 搜索时未调用 NSNetServiceBrowser 委托

我遇到了一个非常烦人的问题。我试图搜索 NSNetService(我知道存在)。我已将http://www.macresearch.org/cocoa-scientists-part-xxviii-bonjour-and-how-do-you-do中的示例代码复制到我自己的应用程序中。我可以看到(在示例程序中)我的服务已创建。但是当我点击搜索并开始 NSNetServiceBrowser 搜索时,什么也没有发生。较新的委托函数被调用

我一直在检查我的对象仍然保留的东西,我看不到任何东西被释放(而且我没有开启 GC)。有人知道该怎么做吗?代码与示例中的代码完全相同,只是我在它周围有一些其他的东西(运行一个 openGL 窗口)。

0 投票
1 回答
327 浏览

ios - Bonjour/Cocoa:如果 'moreServicesComing' 为 NO,NSNetServerBrowser 是否还在监听?

当 NSNetServiceBrowser 实例发现服务时,它会在其委托上调用以下方法:

我的问题:如果moreServicesComing不是,这是否意味着浏览器实例已完全停止侦听服务,并且您将永远不会再获得更新?或者它只是意味着,“这就是现在的全部”,但它会继续搜索?

(如果 NSNetServiceBrowser 实例有一个标志来指示它们的状态,这不会是一个问题。不幸的是,它们没有,所以这有点神秘。)

0 投票
2 回答
1977 浏览

iphone - 解析 NSNetService 时出错

我正在 iPhone 上创建一个通过 wi-fi 玩的棋盘游戏。

当设备 A 邀请设备 B 播放时(尝试解析 B 发布的 NSNetService),设备 B 可以接受或拒绝。

如果 B 拒绝,A 会收到通知,一切都很好。但是,如果 A 稍后再次尝试邀请 B,我的netService:didNotResolve:委托方法中会出现以下错误。

NSNetServicesErrorCode = -72003 NSNetServicesErrorDomain = 10

错误 -72003 表示NSNetServicesActivityInProgress ...我怎样才能让一个玩家多次“邀请”其他玩家?

我正在使用 AsynchSocket 库,谢谢!

0 投票
2 回答
1448 浏览

objective-c - 打开流后 NSNetServiceBrowser didRemoveService 需要更长的时间

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

这导致调用这两种方法(查找服务和删除服务):

这工作正常。当我关闭设备时,我立即收到didRemoveService呼叫。

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

NSNetServiceBrowser 突然花了将近一分钟的时间检测到我关闭了设备(调用didRemoveService
需要一分钟)。

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

更新: 这是与我的问题相关的更多信息。

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

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

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

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

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

0 投票
1 回答
7582 浏览

iphone - iOS 上的 NSNetServiceBrowser/Bonjour 问题

我正在为我一直在从事的 iOS 项目开发的应用程序中通过 WiFi 使用 Bonjour(准确地说是 NSNetServiceBrowser)。

然而,尽管注意到为什么 NSNetServiceBrowser 在 iPhone OS 中找到未发布的服务?我在使用 NSNetSericeBrowser 时仍然遇到很多困难。

我的设置如下:

  • 使用运行 iOS 4.5.3 的 iPad。
  • 使用 AirPort Express 作为接入点/路由器。
  • 在连接到网络的 Mac 上运行 dns-sd -B _serviceName 工作正常——也就是说,所有发布和停止的调用都会立即反映在桌面上。

但是,我遇到了以下问题:-

  1. 发布了很长时间(大约 15 分钟+)的服务往往不会在客户端上被删除,即使它们从 Mac 上消失了!(即 didRemoveService 不会被调用)。
  2. 有时网络上的其他人看不到已发布的服务,即使它们出现在 Mac 上!(即没有调用 didFindService)——这可能与下面的第 3/4 点有关......如果应用程序在 iPad 连接到网络之前开始运行(和搜索),那么它不会搜索新网络适当地。
  3. 如果设备在发布服务后更改网络会发生什么?我发现 Bonjour 不会新网络上重新发布服务 - 怎么能强迫这种情况发生?
  4. 如果设备在搜索服务时更改网络会发生什么?我发现这也会导致问题,并且往往会导致找不到会话(未调用 didFindService)。

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

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

有什么想法可以解决问题 1-4?

谢谢!

0 投票
3 回答
894 浏览

ios - Apple Bonjour:我如何判断哪个已发布服务是我自己的?

我有两台 iOS 设备使用 Bonjour API 成功地找到彼此,但由于它们同时发布和浏览,它们也看到自己出现在可用服务列表中。每个端点必须有一些信息可以用来确定服务是他们自己的,并将其从他们的列表中排除...我确定我只是在某个地方错过了它 - 有什么想法吗?

我使用了文档中的示例,并进行了一些小改动。

0 投票
2 回答
971 浏览

ios - NetServiceBrowser 在移除时会提供不同的 NetService

我希望做这样的事情:

netServiceBrowser:didFindService:moreComing:

而在netServiceBrowser:didRemoveService:moreComing:

但是,返回的服务不会被 NetServiceBrowser 保留,因此给出的服务didRemoveService与数组中的服务不是同一个对象。如何比较服务以确保我删除的服务是正确的?

0 投票
0 回答
1065 浏览

iphone - 客户未发现 bonjour 服务

我刚刚开始学习设计 iphone 应用程序,并且正在尝试设置客户端服务器环境。作为初学者,我想首先确保我发布的服务对客户端是可见的。我在 Apple 文档的帮助下编写了服务器和客户端代码。但是,我发现虽然我的服务正在发布(调用了 netServiceWillPublish(NSNetService *)sender),但我的客户端并未识别此服务。在客户端调用委托函数 netServiceBrowserWillSearch:(NSNetServiceBrowser *)browser 使我相信客户端正在搜索服务。但是 didFindService 委托函数永远不会被调用。我很困惑为什么这不起作用。我已经从各个地方遵循了客户端的示例代码,并且我的代码与他们的代码相匹配。

我还有以下问题

  1. 服务名称(随传输层协议一起提供)可以是任何字符串吗?还是必须在http://www.dns-sd.org/ServiceTypes.html中指定。除了服务发现之外,这还有什么目的。

  2. 当我在服务器端打印出 NSNetService 对象的详细信息时(在设置套接字并启动服务之后),主机名被打印为(null)并且没有显示地址。从技术上讲,当服务打开时,这些不应该设置为值吗?如果是的话,有人可以告诉我我的代码哪里出错了吗?

我已经附加了我的项目的客户端和服务器代码块,其中完成了服务的发布和浏览。非常感谢您的帮助,因为我一直在处理这个问题。

这是浏览服务的客户端的代码片段

这是发布服务的服务器端的代码片段

这是告诉服务已发布并打印出我的 NSSocket 对象的详细信息的代码片段

谢谢维韦克
_

0 投票
1 回答
2156 浏览

objective-c - NSNetServiceBrowser 找不到存在的服务

我有一个自定义的 Cocoa (OSX) 服务器和客户端,服务器发布了一个 bonjour 服务。我让客户端使用 搜索服务器NSNetServiceBrowser,但我从未得到任何结果。我知道该服务已发布,因为它位于mdns -B _myservicetype._tcp. 我的搜索和发布代码都使用相同的域、名称和类型进行搜索和发布,并且几乎与 Apple 示例代码相同。这是发布代码:

这是搜索和委托方法:

以下是委托方法:

其中大部分只是 GUI 代码和 NSLogs,但我从来没有得到 gui 更改或 NSLogs。有没有人有办法解决吗?

0 投票
0 回答
871 浏览

ios - NSNetServiceBrowser 找不到任何服务,委托方法似乎没有被调用

我正在使用 NSNetServiceBrowser 浏览 bonjour 服务。该服务已成功启动,但是,我在浏览该服务时遇到了问题。当我拨打电话searchForServicesOfType:inDomain时,只调用netServiceBrowserWillSearch委托方法。没有调用其他委托方法,我找不到任何服务。答案似乎是由这个人在这里给出的,NSNetServiceBrowser 没有找到存在的服务,但我无法理解他的实际意思(参见答案的第 2 部分)。问题的作者解决了这个问题,但他没有详细说明。请告诉我为什么其他委托方法如netServiceBrowser:didFindService:moreComing:不被称为“谢谢”。