问题标签 [zeroconf]

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 投票
2 回答
1516 浏览

delphi - Zeroconf / Bonjour 和 Delphi

有没有人玩过,或者得到了一个通过 Delphi 加载和使用 dnsds.dll (zeroconf / bonjour / dns-ds) 的例子。我有 ac# 版本,但这不是我想要的。

谢谢

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 投票
3 回答
332 浏览

uri - 在 URI 语法中支持 zeroconf 的最佳方法是什么?

在 URI 设计的位置段中支持 zeroconf 名称的最佳方法是什么?

RFC 3986(统一资源标识符(URI):通用语法)没有提到 zeroconf,我担心 URI 语法的设计目的不是超出 DNS 解析。

理想的答案语法将:

  1. 符合通用 URI 语法
  2. 处理带有多字节字符的 zeroconf 名称
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 投票
5 回答
14310 浏览

javascript - Javascript 中的 Bonjour 发现?也许?

所以这是一个远射,我会从那个开始。

是否有可能仅在 javascript 中发现 bonjour 广告的 HTTP 服务?

为什么这会有用?想象一个本地服务在处理一些数据(例如您当前的纬度/经度),这些数据通过网络服务公开并由 Bonjour Zeroconf 公布。(远程)网站可能想知道您当前的纬度/经度,而不必知道您正在运行MyGPSserverVersion2,该网站可以使用 javascript 搜索本地 bonjour _Compatible_location_services._tcp,然后在获得 IP 地址后继续。

如果这是不可能的(我认为可能是这种情况,Javascript 相当受限)那么障碍是什么,有没有人对如何克服它们有任何想法?

0 投票
1 回答
925 浏览

erlang - 无法打开多播套接字

我在 Erlang 中打开多播套接字以接收消息时遇到问题:

我检查了不同的 IP 地址和端口以及选项 {active, false},但没有任何帮助。可能是什么原因?

谢谢,马蒂亚斯。

0 投票
4 回答
11156 浏览

python - 通过 Zeroconf/Bonjour 发布的最简单方法?

我有一些我想用 zeroconf 显示的应用程序。

  1. 有没有一种简单的可编写脚本的方法来做到这一点?
  2. 我的网络管理员需要做些什么来启用它吗?

Python 或 sh 将是可取的。欢迎针对 Linux 和 OS X 提出特定于操作系统的建议。

0 投票
4 回答
3987 浏览

c - lwIP 支持 Zeroconf 吗?

我看到lwIP有一些 AutoIP(又名 IPv4LL,又名RFC 3927)代码,但我不知道它是否在Zeroconf堆栈中做了任何更高的事情,即 mDNS 和DNS-SD(使用RFC 2782)。

那么,lwIP 是否支持 DNS-SD 服务发现?如果不是,从像Avahi这样的项目中移植代码是否容易(假设许可允许)?

0 投票
4 回答
1660 浏览

php - 我可以使用哪些编程语言来编写 Bonjour 软件?

我真的受到编程语言的限制吗?我可以想象,要使用 Bonjour,我需要有任何语言都无法使用的特殊库。所以,那么我需要使用那些具有相应库的语言。作为第二个选项,我可以想象,Bonjour 提供了一个几乎可以被任何语言使用的界面(例如,Bonjour 将信息保存在特殊文件或环境变量中,而我可以使用大多数语言来访问这些信息) .

PS我对PHP特别感兴趣。