问题标签 [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.
delphi - Zeroconf / Bonjour 和 Delphi
有没有人玩过,或者得到了一个通过 Delphi 加载和使用 dnsds.dll (zeroconf / bonjour / dns-ds) 的例子。我有 ac# 版本,但这不是我想要的。
谢谢
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 中进行完整构建:它再次工作
这会给任何人其他想法吗?
uri - 在 URI 语法中支持 zeroconf 的最佳方法是什么?
在 URI 设计的位置段中支持 zeroconf 名称的最佳方法是什么?
RFC 3986(统一资源标识符(URI):通用语法)没有提到 zeroconf,我担心 URI 语法的设计目的不是超出 DNS 解析。
理想的答案语法将:
- 符合通用 URI 语法
- 处理带有多字节字符的 zeroconf 名称
erlang - 如何在 Erlang 中建立 DNS 查询记录?
我正在构建一个本地 Bonjour / Zeroconf 库,需要构建 DNS 查询记录以广播到其他机器。我曾尝试通过 Erlang 源代码查看,但由于我对 Erlang 比较陌生,它在所有 inet_XXX.erl 和 .hrl 文件的内部变得有点密集。我有一个用于接收和解析 DNS 记录有效负载的侦听器,我只是不知道如何创建查询记录。我真正需要知道的是我需要传递给 inet_dns:encode() 以获得可以发送的二进制文件。这是我想要做的。
这是我得到的错误
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 多播有任何神秘的见解?更新,以便我可以尝试接受答案。我想我不能这样做。
javascript - Javascript 中的 Bonjour 发现?也许?
所以这是一个远射,我会从那个开始。
是否有可能仅在 javascript 中发现 bonjour 广告的 HTTP 服务?
为什么这会有用?想象一个本地服务在处理一些数据(例如您当前的纬度/经度),这些数据通过网络服务公开并由 Bonjour Zeroconf 公布。(远程)网站可能想知道您当前的纬度/经度,而不必知道您正在运行MyGPSserverVersion2,该网站可以使用 javascript 搜索本地 bonjour _Compatible_location_services._tcp
,然后在获得 IP 地址后继续。
如果这是不可能的(我认为可能是这种情况,Javascript 相当受限)那么障碍是什么,有没有人对如何克服它们有任何想法?
erlang - 无法打开多播套接字
我在 Erlang 中打开多播套接字以接收消息时遇到问题:
我检查了不同的 IP 地址和端口以及选项 {active, false},但没有任何帮助。可能是什么原因?
谢谢,马蒂亚斯。
python - 通过 Zeroconf/Bonjour 发布的最简单方法?
我有一些我想用 zeroconf 显示的应用程序。
- 有没有一种简单的可编写脚本的方法来做到这一点?
- 我的网络管理员需要做些什么来启用它吗?
Python 或 sh 将是可取的。欢迎针对 Linux 和 OS X 提出特定于操作系统的建议。
php - 我可以使用哪些编程语言来编写 Bonjour 软件?
我真的受到编程语言的限制吗?我可以想象,要使用 Bonjour,我需要有任何语言都无法使用的特殊库。所以,那么我需要使用那些具有相应库的语言。作为第二个选项,我可以想象,Bonjour 提供了一个几乎可以被任何语言使用的界面(例如,Bonjour 将信息保存在特殊文件或环境变量中,而我可以使用大多数语言来访问这些信息) .
PS我对PHP特别感兴趣。