问题标签 [dns-sd]

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

c++ - 在 Windows 上使用 MFC 的 DNS-SD

我有一个使用 MFC 构建的应用程序,我需要将 Bonjour/Zeroconf 服务发现添加到其中。我在弄清楚如何最好地做到这一点时遇到了一些麻烦,但我决定使用 mDNSresponder 源代码中提供的 DLL 存根并将我的应用程序链接到由它生成的静态库(反过来使用系统dnssd.dll)。

但是,我仍然遇到问题,因为回调似乎并不总是被调用,所以我的设备发现停止了。让我感到困惑的是,在 OSX 下,使用 OSX dns-sd 终端服务和在 Windows 下使用 dns-sd 命令行服务,这一切都可以正常工作。在此基础上,我排除了客户端服务的问题,并试图找出我的 Windows 代码出了什么问题。

我基本上是在调用 DNSBrowseService(),然后在该回调中调用 DNSServiceResolve(),最后调用 DNSServiceGetAddrInfo() 来获取设备的 IP 地址,以便我可以连接到它。

所有这些调用都基于使用 WSAAsyncSelect,如下所示:

但有时即使服务在那里,回调也不会被调用,并且使用命令行会确认这一点。

我完全不知道为什么这不是 100% 可靠,但如果我在命令行中使用相同的 DLL,那就是这样。我唯一可能的解释是,DNSServiceResolve 函数尝试在 WSAAsyncSelect 为套接字注册处理消息之前调用回调函数,但我看不到任何解决方法。

我在这上面花了很长时间,现在完全没有想法了。任何建议都会受到欢迎,即使它们是“这是一种非常愚蠢的方法,你为什么不做 X、Y、Z”。

0 投票
0 回答
252 浏览

ios - GKSession蓝牙连接问题

我的目标是创建一个具有 1 个主控和 1..6 个客户端的客户端/服务器蓝牙游戏。设备是装有 iOS 6+ 的 iPad v.2-4。

这个任务的第一个实现是使用带有客户端/服务器模型的 GKSession 类。GSSession implementation shawn 认为这个类包含很多客户端检测服务器的问题,当连接 4 个以上的设备时不稳定等等。

好的,我拒绝使用 GKSession 并重新设计了网络类来处理通过蓝牙和 CFSockets 发布的 DNSSD-api 服务器。这种实现还向客户端显示服务器发现和连接问题的错误。

我现在有一个想法,即为每个客户端 iPad 创建一个具有唯一 SessionID 的 GKSession 对象,并在服务器 iPad 上实现一组 GKSession——因此每个客户端都将使用它自己的 GKSession 进行操作。

有人可以给我一个建议,我应该如何通过蓝牙与 7 个 iPad 建立稳定的连接,你认为我做错了什么?

0 投票
1 回答
329 浏览

python - Python,运行子进程并读取输出而不挂起程序

第一篇在这里,我必须说我对一般的编程有点业余......我在osx上使用python 2.7.5子进程模块来读取名为dns-sd的实用程序的输出。

目标是找出在我的网络上运行的 SSH 文件服务器。使用“dns-sd -B _ssh._tcp”。在以下用途中工作正常:

请注意,这是一个“实时”实用程序,如果 Python 脚本继续运行,则 dns-sd 输出的新行将通过打印自动显示。这是一个典型的输出:

我遇到的问题是,一旦我执行 newCheckNAS.StartCheck(),程序的其余部分只需等待 dns-sd 实用程序完成以继续。但是这个实时实用程序永远不会停止,它需要在后台继续监控。

我查看了各种线程、多处理甚至 pybonjour 模块,但我并不真正了解它们是如何工作的……我想我必须启动一个运行该实用程序的线程和另一个线程来收听它?

0 投票
1 回答
1564 浏览

java - Bonjour - 用于 Linux 的 DNS_SD.jar 库?

我实际上是在我的 MAC 上运行的 Java 程序中使用 dns_sd.jar 库来注册 Bonjour 服务。

这个库是使用包导入Java项目的:com.apple.dnssd.*;我尝试了几次来了解这个库来自哪里?我想这个库是由 Apple 创建的,并且已经安装在每个 Mac OSx 上。那是对的吗 ?

似乎该库的相同 API 在 Linux 和 Windows 上可用。那么这是否意味着每个特定操作系统都有其他 dns_sd.jar ?或者我们可以在 Linux 和 windows 上使用相同的库吗?

为什么苹果开发者网站上没有提供这个库?我到处找!

我问所有这些问题是因为我想知道我是否可以在 linux 系统上轻松转换我的 Java 程序?

谢谢您的帮助 !

0 投票
2 回答
826 浏览

windows - Bonjour DNS-SD 回调没有被调用,我的代码哪里出错了?

我正在尝试使用这篇博客文章作为参考来学习如何使用 Bonjour:

http://marknelson.us/2011/10/25/dns-service-discovery-on-windows/

我已经下载了链接在该页面底部的示例项目,它就像魅力一样。现在我试图在我的控制台应用程序中从头开始重现服务发现:

DNSServiceBrowse返回kDNSServiceErr_NoError,但从不调用回调。怎么了?

0 投票
1 回答
1461 浏览

bonjour - 从 IP 地址获取链路本地域名(即使用多播 DNS 和 DNS-SD 进行反向 DNS 查找)

我有一个服务器应用程序在 LAN 上的设备上运行,可通过 DNS-SD(即 Zeroconf/Bonjour/Avahi)发现。也在 LAN 上的客户端设备连接到此服务器。我无法控制使用什么应用程序连接到我的服务器应用程序,但我知道他们很可能使用 DNS-SD 和 mDNS 来发现并连接到服务器。仅在给定 C 或 C++ 中的 IP 地址的情况下,如何检索标识这些客户端设备的链接本地域名​​?

根据RFC 6762 Multicast DNS - Section 4. Reverse Address Mapping :
"Like ".local.",IPv4 和 IPv6 反向映射域也被定义为链路本地...因为此域下的名称对应于 IPv4 链路-本地地址,本地链接是查找与这些名称有关的信息的最佳位置是合乎逻辑的。”

所以理论上,应该可以通过IP地址查找链接本地域名​​。有谁知道怎么做?也许我没有在正确的地方寻找,但我没有在 Bonjour 文档中看到对此的 API 调用。

0 投票
1 回答
3086 浏览

airplay - 如何使 AirPlay 按钮出现?

目前我正在尝试制作某种播放服务器,但失败了。问题是我的ios设备上没有出现airplay按钮。我已经关注了这个链接,但我被困在需要注册播放服务的地方。我正在使用 dns-sd -R MyAirplayService _airplay._tcp local 22555命令,服务显示为已注册,但我没有按钮。尝试将端口更改为 7000 或 7100,但结果相同。你能告诉我,我哪里错了吗?

0 投票
1 回答
179 浏览

linux - 当域由 DHCP 服务器分配时,哪个域向 DNS-SD 注册服务名称?

我想用 DNS-SD 注册我的设备,我必须在 DHCP 服务器分配的域中注册它。但是如何获取 DHCP 服务器分配的域呢?

我应该如何知道网络上已启动 DHCP 服务器并为我的设备分配了新的网络配置?此外,如果 DHCP 服务器没有分配域,我将在本地域中注册服务。

我可以从 resolv.conf 中提取域吗?

0 投票
1 回答
2788 浏览

objective-c - 使用 iOS SDK 解析 SRV 记录

我想使用 iOS SDK 解析 DNS SRV 记录。

我已经尝试过 Apple 提供的高级 Bonjour API,但它们不是我需要的。现在我正在使用 DNS SD。

只要它只获取正确的 SRV 记录(例如:_xmpp-server._tcp.gmail.com),这就会起作用,但是当记录输入错误时,DNSServiceProcessResult(sdRef) 会进入无限循环。

有没有办法停止 DNSServiceProcessResult 或者我必须取消调用它的线程?

0 投票
1 回答
2589 浏览

node.js - 为什么 Node.js UDP 客户端收不到消息?

我正在尝试在 Node.js 中编写多播 DNS 客户端。

目标是显示我正在运行的相同逻辑输出:

这是引擎盖下的 UDP 数据包:

所以我写了这个:

运行此脚本时,它会输出:

并且 tcpdump 输出同样的东西:

所以看起来它正确地发送与 dns-sd 相同的数据包,并接收相同的东西,但脚本的message事件处理程序没有触发。为什么?如何解决这个问题并输出收到的数据包?

我在 MacOSX10.9,Node.js 0.10.25