问题标签 [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.
objective-c - 搜索时未调用 NSNetServiceBrowser 委托
我遇到了一个非常烦人的问题。我试图搜索 NSNetService(我知道存在)。我已将http://www.macresearch.org/cocoa-scientists-part-xxviii-bonjour-and-how-do-you-do中的示例代码复制到我自己的应用程序中。我可以看到(在示例程序中)我的服务已创建。但是当我点击搜索并开始 NSNetServiceBrowser 搜索时,什么也没有发生。较新的委托函数被调用
我一直在检查我的对象仍然保留的东西,我看不到任何东西被释放(而且我没有开启 GC)。有人知道该怎么做吗?代码与示例中的代码完全相同,只是我在它周围有一些其他的东西(运行一个 openGL 窗口)。
ios - Bonjour/Cocoa:如果 'moreServicesComing' 为 NO,NSNetServerBrowser 是否还在监听?
当 NSNetServiceBrowser 实例发现服务时,它会在其委托上调用以下方法:
我的问题:如果moreServicesComing
不是,这是否意味着浏览器实例已完全停止侦听服务,并且您将永远不会再获得更新?或者它只是意味着,“这就是现在的全部”,但它会继续搜索?
(如果 NSNetServiceBrowser 实例有一个标志来指示它们的状态,这不会是一个问题。不幸的是,它们没有,所以这有点神秘。)
iphone - 解析 NSNetService 时出错
我正在 iPhone 上创建一个通过 wi-fi 玩的棋盘游戏。
当设备 A 邀请设备 B 播放时(尝试解析 B 发布的 NSNetService),设备 B 可以接受或拒绝。
如果 B 拒绝,A 会收到通知,一切都很好。但是,如果 A 稍后再次尝试邀请 B,我的netService:didNotResolve:委托方法中会出现以下错误。
NSNetServicesErrorCode = -72003 NSNetServicesErrorDomain = 10
错误 -72003 表示NSNetServicesActivityInProgress ...我怎样才能让一个玩家多次“邀请”其他玩家?
我正在使用 AsynchSocket 库,谢谢!
objective-c - 打开流后 NSNetServiceBrowser didRemoveService 需要更长的时间
我有以下代码用于发现网络上的服务:
这导致调用这两种方法(查找服务和删除服务):
这工作正常。当我关闭设备时,我立即收到didRemoveService呼叫。
但是,当我打开设备的流(输入、输出或两者)时:
NSNetServiceBrowser 突然花了将近一分钟的时间检测到我关闭了设备(调用didRemoveService
需要一分钟)。
一旦我删除它们,我不与之通信(打开流)的设备仍然会调用didRemoveService 。
更新: 这是与我的问题相关的更多信息。
我使用 Wireshark 进行了跟踪,并注意到以下内容:
我在 iPad 模拟器中启动我的应用程序,该应用程序启动 NSNetServiceBrowser 并检测打印机。之后,它打开设备的输入/输出流(通过机场快线、usb)。打印机正在向我发送状态更新,当我点击应用程序中的测试按钮时,打印机开始打印。在 Wireshark 中,我按预期看到了与打印机的所有通信。
现在,当我在 iPad 上启动完全相同的应用程序(并让 iPad 模拟器运行)时。该应用程序也会启动 NSNetServiceBrowser,并检测打印机。打印机没有向我发送状态更新,当我点击测试按钮时,打印机没有打印。在 Wireshark 中,我看到了通信。打印机或机场收到我的命令并发送一个 ACK 包。
一旦我杀死 iPad 模拟器应用程序,打印机就会开始打印我使用 iPad 发送的命令。似乎打开一个套接字会阻止所有 bonjour 事件,我该如何防止这种情况发生?
iphone - iOS 上的 NSNetServiceBrowser/Bonjour 问题
我正在为我一直在从事的 iOS 项目开发的应用程序中通过 WiFi 使用 Bonjour(准确地说是 NSNetServiceBrowser)。
然而,尽管注意到为什么 NSNetServiceBrowser 在 iPhone OS 中找到未发布的服务?我在使用 NSNetSericeBrowser 时仍然遇到很多困难。
我的设置如下:
- 使用运行 iOS 4.5.3 的 iPad。
- 使用 AirPort Express 作为接入点/路由器。
- 在连接到网络的 Mac 上运行 dns-sd -B _serviceName 工作正常——也就是说,所有发布和停止的调用都会立即反映在桌面上。
但是,我遇到了以下问题:-
- 发布了很长时间(大约 15 分钟+)的服务往往不会在客户端上被删除,即使它们从 Mac 上消失了!(即 didRemoveService 不会被调用)。
- 有时网络上的其他人看不到已发布的服务,即使它们出现在 Mac 上!(即没有调用 didFindService)——这可能与下面的第 3/4 点有关......如果应用程序在 iPad 连接到网络之前开始运行(和搜索),那么它不会搜索新网络适当地。
- 如果设备在发布服务后更改网络会发生什么?我发现 Bonjour 不会在新网络上重新发布服务 - 怎么能强迫这种情况发生?
- 如果设备在搜索服务时更改网络会发生什么?我发现这也会导致问题,并且往往会导致找不到会话(未调用 didFindService)。
我遇到的问题很奇怪,因为 Bonjour 90% 的时间都在工作……只是那 10% 的时间破坏了我的应用程序的可靠性!令人讨厌的是,上述所有问题都可以通过双击主页按钮并强制关闭应用程序,然后重新运行来解决。再次运行后,它总能找到正确的会话或正确发布。
回避此问题的一种方法是在无线网络发生更改时拆除并重新启动 NSNetServiceBrowser ......但这似乎非常混乱且不必要。令人沮丧的是,Bonjour 是一个高级 API,没有任何实际的调整和测试选项。
有什么想法可以解决问题 1-4?
谢谢!
ios - Apple Bonjour:我如何判断哪个已发布服务是我自己的?
我有两台 iOS 设备使用 Bonjour API 成功地找到彼此,但由于它们同时发布和浏览,它们也看到自己出现在可用服务列表中。每个端点必须有一些信息可以用来确定服务是他们自己的,并将其从他们的列表中排除...我确定我只是在某个地方错过了它 - 有什么想法吗?
我使用了文档中的示例,并进行了一些小改动。
ios - NetServiceBrowser 在移除时会提供不同的 NetService
我希望做这样的事情:
在netServiceBrowser:didFindService:moreComing:
而在netServiceBrowser:didRemoveService:moreComing:
但是,返回的服务不会被 NetServiceBrowser 保留,因此给出的服务didRemoveService
与数组中的服务不是同一个对象。如何比较服务以确保我删除的服务是正确的?
iphone - 客户未发现 bonjour 服务
我刚刚开始学习设计 iphone 应用程序,并且正在尝试设置客户端服务器环境。作为初学者,我想首先确保我发布的服务对客户端是可见的。我在 Apple 文档的帮助下编写了服务器和客户端代码。但是,我发现虽然我的服务正在发布(调用了 netServiceWillPublish(NSNetService *)sender),但我的客户端并未识别此服务。在客户端调用委托函数 netServiceBrowserWillSearch:(NSNetServiceBrowser *)browser 使我相信客户端正在搜索服务。但是 didFindService 委托函数永远不会被调用。我很困惑为什么这不起作用。我已经从各个地方遵循了客户端的示例代码,并且我的代码与他们的代码相匹配。
我还有以下问题
服务名称(随传输层协议一起提供)可以是任何字符串吗?还是必须在http://www.dns-sd.org/ServiceTypes.html中指定。除了服务发现之外,这还有什么目的。
当我在服务器端打印出 NSNetService 对象的详细信息时(在设置套接字并启动服务之后),主机名被打印为(null)并且没有显示地址。从技术上讲,当服务打开时,这些不应该设置为值吗?如果是的话,有人可以告诉我我的代码哪里出错了吗?
我已经附加了我的项目的客户端和服务器代码块,其中完成了服务的发布和浏览。非常感谢您的帮助,因为我一直在处理这个问题。
这是浏览服务的客户端的代码片段
这是发布服务的服务器端的代码片段
这是告诉服务已发布并打印出我的 NSSocket 对象的详细信息的代码片段
谢谢维韦克
_
objective-c - NSNetServiceBrowser 找不到存在的服务
我有一个自定义的 Cocoa (OSX) 服务器和客户端,服务器发布了一个 bonjour 服务。我让客户端使用 搜索服务器NSNetServiceBrowser
,但我从未得到任何结果。我知道该服务已发布,因为它位于mdns -B _myservicetype._tcp
. 我的搜索和发布代码都使用相同的域、名称和类型进行搜索和发布,并且几乎与 Apple 示例代码相同。这是发布代码:
这是搜索和委托方法:
以下是委托方法:
其中大部分只是 GUI 代码和 NSLogs,但我从来没有得到 gui 更改或 NSLogs。有没有人有办法解决吗?
ios - NSNetServiceBrowser 找不到任何服务,委托方法似乎没有被调用
我正在使用 NSNetServiceBrowser 浏览 bonjour 服务。该服务已成功启动,但是,我在浏览该服务时遇到了问题。当我拨打电话searchForServicesOfType:inDomain
时,只调用netServiceBrowserWillSearch
委托方法。没有调用其他委托方法,我找不到任何服务。答案似乎是由这个人在这里给出的,NSNetServiceBrowser 没有找到存在的服务,但我无法理解他的实际意思(参见答案的第 2 部分)。问题的作者解决了这个问题,但他没有详细说明。请告诉我为什么其他委托方法如netServiceBrowser:didFindService:moreComing:
不被称为“谢谢”。