问题标签 [bonjour]

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 回答
2134 浏览

java - 使用 Bonjour 获取设备 IP

我正在使用 Java 6 update 14 进行开发和 NetBeans 6.7。我正在创建一个示例客户端来使用 Bonjour 检测特定类型的服务。

我在想要获取设备的 IP 地址时面临一定的挑战。但是ResolveListener.serviceResolved(...)函数只提供主机名和端口。FullName 也不包含设备的 IP 信息。是否可以使用 Bonjour SDK 获取设备的 IP 地址?如果是,如何?

谢谢。

0 投票
1 回答
591 浏览

iphone - 什么会导致 Bonjour 在浏览过程中不给我回电?

我在 App Store 中有一个相当流行的基于 Bonjour 的应用程序。它运行良好,但大约 0.2% 的用户报告了一个奇怪的错误:“屏幕边缘没有出现箭头,所以我无法与其他人分享内容!”。不用说,显示这些箭头与浏览本地域上的特定 Bonjour 服务有关。

问题是,苹果审核团队似乎间歇性地恰好在这 0.2% 之内。正如您可能想象的那样,这对审核结果不利。无论我如何尝试,我都无法重现此错误。

从我拥有的少数日志来看,我的应用程序运行正常,只是没有收到NSNetServiceBrowser委托调用。什么会导致这种情况?

我尝试过的事情:

  • 具有较短的服务名称 < 14 个字符的长度符合规范。
  • 发布@"local."而不是@""(又名去寻找默认注册域)。无论如何,我的应用程序在广域网上毫无用处。

我没有尝试过的事情:定期重新启动浏览器。(不过,我有两种浏览器,一种寻找旧的较长名称,一种寻找新的较短名称。)

该怎么办?

0 投票
4 回答
2107 浏览

delphi - 在 Delphi 7 中有效的 ZeroConf/Bonjour 代码在 2009 年无效

我对 DNSServiceRegister 有以下声明:

在我的 Bonjour 框架中,我对激活的已宣布服务有以下响应(即通过 Bonjour 实际开始宣布自己):

这比我认为它严格需要的更冗长,当然它在 Delphi 7 中以一种不那么冗长的形式运行得很好。我已将许多操作扩展为显式步骤以促进调试,例如,能够识别可能在 Delphi 2009 中“幕后”发生的字符串有效负载的任何隐式转换。

即使在这种杂乱无章的扩展形式中,此代码在 Delphi 7 中也能很好地编译和运行,但如果我使用 Delphi 2009 编译和运行,我不会收到关于我的服务的通知。

例如,如果我将此代码作为 Delphi 7 应用程序的一部分运行以注册_daap._tcp服务(iTunes 共享库),我会看到它在运行的 iTunes 实例中弹出。如果我在 Delphi 2009 中不加修改地重新编译完全相同的应用程序并运行它,我看不到我的服务出现在 iTunes 中。

使用dns-sd命令行实用程序进行监视时,我得到了相同的行为。也就是说,使用 Delphi 7 编译的服务代码的行为与我预期的一样,在 Delphi 2009 中编译 - 没有。

我没有从 Bonjour API收到任何错误 -正在调用DNSServiceRegisterReply回调,错误代码为 0(零),即成功,如果我提供带有在标志中指定的 AutoRename 的 NIL 名称参数,那么我的服务被分配了正确的默认名称。但该服务仍然没有出现在 iTunes 中。

我不知道发生了什么。

正如您从代码的扩展中可能看出的那样,我一直在寻找由 Delphi 2009 中的 Unicode 实现引入的潜在错误,但这似乎让我无处可去。

该代码最初是针对 Bonjour API/SDK 1.0.3 版开发的。我已经更新到 1.0.6,以防万一涉及到,但没有任何成功。afaict 1.0.6 只是添加了一个用于获取“属性”的新功能,该功能目前仅支持用于获取 Bonjour 版本的“DaemonVersion”属性 - 这非常有效。

注意:我知道 Delphi 7 中的代码在技术上不是 UTF8 安全的 - 我已尽可能消除显式转换,以使 Delphi 2009 应用的自动转换尽可能简单。我现在的目标是让它在 Delphi 2009 中工作,然后从该解决方案向后工作,希望找到与早期版本的 Delphi 兼容的方法。

还请注意:我最初在浏览广告服务时也遇到了问题,即识别网络上的实际 iTunes 共享库。这些问题是由 Delphi 2009 中的 Unicode 处理引起的,并且已得到解决。我的 Delphi 2009 代码同样能够识别实际的 iTunes 共享库并查询它的 TXT 记录。只有这个服务注册不起作用。

我一定错过了一些愚蠢而明显的东西。

有没有人有什么想法?!

更新

回到这个问题后,我现在发现了以下内容:

如果我打开了一个 pre-D2009 和一个 D2009+ IDE(例如 D2006 和 D2010),同时将同一个项目加载到两个 IDE 中:

  • 在 2006 年构建和运行:它有效 - 我的服务公告被 iTunes 接收
  • 切换到 D2010 并运行(无需构建):它进行了最小的编译、运行和工作。
  • 在 D2010 中进行完整构建:它停止工作

  • 切换回 D2006 并运行(不构建):它不起作用

  • 在 D2006 中进行完整构建:它再次工作

这会给任何人其他想法吗?

0 投票
2 回答
4574 浏览

security - 为什么 mDNS(Bonjour、Avahi 等)使用 UDP?

在我看来,DNS 的许多问题,尤其是安全问题,都是通过 UDP 实现 DNS 的根本原因;例如,响应者不必是他所说的那个人。

我不知道 mDNS 协议的细节(我认为它比 DNS 更新得多),也许它在应用程序级别处理了这些问题。任何人都可以为我阐明这一点吗?

0 投票
2 回答
8716 浏览

iphone - 如何获取所有可用域上所有已宣布的 bonjour 服务的列表?

在所有域中查找不是问题,但我找不到在网络上查找任何服务的正确方法。

0 投票
1 回答
1562 浏览

ruby - 红宝石中的 Bonjour

我知道dnssd,它是 Apple 的 Bonjour 协议的 Ruby 库,仅用于 Mac OS X 的网络发现,但是是否有一个(相对较新/完整的)跨平台库?

0 投票
1 回答
857 浏览

cocoa - 可可中的客户端到客户端消息传递?

erm,现在我尝试在两个客户端而不是客户端到服务器之间进行消息传递。因此,如果我没记错的话,我们不能单独启动服务,但是如何查看是单独设置还是两者都连接到同一个服务?

我的服务启动代码:

有什么建议吗?

0 投票
3 回答
1851 浏览

erlang - 如何在 Erlang 中建立 DNS 查询记录?

我正在构建一个本地 Bonjour / Zeroconf 库,需要构建 DNS 查询记录以广播到其他机器。我曾尝试通过 Erlang 源代码查看,但由于我对 Erlang 比较陌生,它在所有 inet_XXX.erl 和 .hrl 文件的内部变得有点密集。我有一个用于接收和解析 DNS 记录有效负载的侦听器,我只是不知道如何创建查询记录。我真正需要知道的是我需要传递给 inet_dns:encode() 以获得可以发送的二进制文件。这是我想要做的。

这是我得到的错误

0 投票
3 回答
2642 浏览

erlang - 如何在 Erlang 中发送多播消息并重用端口?

我的程序有了一个良好的开端,我的第一个 REAL Erlang 程序。我让它监听消息,阅读它们并解析它们。我也有它发送给他们。困扰我的一件小事是我无法在端口 5353 上发送,我已经尝试了所有方法。我机器上的所有其他应用程序都可以在端口 5353、SubEthaEdit、iTunes、iChat 上监听和发送。

解决方案必须在端口 5353 上广播发送,这就是原因。

" 如果接收到的组播 DNS 查询中的源 UDP 端口不是端口 5353,这表明发起查询的客户端是一个简单的客户端,没有完全实现所有组播 DNS。在这种情况下,组播 DNS 响应程序必须发送一个UDP 响应直接返回客户端,通过单播,到查询数据包的源 IP 地址和端口。此单播响应必须是传统单播 DNS 服务器生成的传统单播响应;例如,它必须重复查询 ID以及查询包中给出的问题。”

它们在发送多播消息时都报告端口:5353。我真的希望我的应用程序运行良好并做同样的事情,在端口 5353 上发送。这是我现在的模块。

这是一些输出的样子。

这是来自 SubEthaEdit 的查询,用于查找本地网络上的其他实例,请注意它说 Port: 5353

现在这是我的模块中的一个查询,用于查找本地网络上的 iTunes 实例,请注意它显示端口:59795 使用现在的代码方式,该端口是随机的。我真的希望它是 5353。

有没有人对 UDP 多播有任何神秘的见解?更新,以便我可以尝试接受答案。我想我不能这样做。

0 投票
2 回答
466 浏览

iphone - 安全的 iPhone 桌面连接

背景

有很多 App Store 发布的 iPhone 应用程序需要在桌面上使用基于 IP 的服务器,以便 iPhone 可以作为客户端连接到桌面。例如,有许多程序可以在 iPhone 上模拟键盘、触摸板或Apple 遥控器,以便可以通过 wifi 控制台式计算机。然而,许多这些应用程序通过要求用户安装一些 VNC 服务器变体来绕过编写自己的服务器。

问题

在桌面(Mac 和 Windows 平台)上实现安全(加密)IP 服务器的最佳方式是什么,它允许在自身和 wifi 网络上的 iPhone 客户端之间进行简单的双向消息传递?

示例用例

桌面上的事件会导致桌面将小图像或文本推送到 iPhone。iPhone 上的事件会导致将短文本消息推送到桌面。任何单个事件都可能随时发生(不会与用户同步)。

第一个后续问题

这种类型的项目最好使用 XML 或 JSON over HTTP 之类的东西来处理吗?还是有更好的协议,比如 BEEP 或 Bonjour(XMPP)?