问题标签 [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 回答
2103 浏览

windows - 在 Windows 上使用 Bonjour 进行广告服务

我正在为 Mac OS 和 Windows 开发 iPhone 上的遥控器。我使用 Bonjour 框架,它在 Mac OS 上运行良好。我可以在我的 iPhone 上看到拥有我的服务器的不同 Mac 设备。

我想在 Windows 上使用 C 或 C# 语言做同样的事情。我已经写了一段代码它不起作用:我的 iPhone 没有看到该服务。这是我认为可能是错误的代码行:

p>

你有想法吗?非常感谢 !

0 投票
5 回答
2315 浏览

iphone - 如何在我的 iPhone 应用程序和 Mac/PC 之间共享文件

我开发了一个 iPhone 应用程序,它将照片存储在/Documents我的应用程序目录中。

我想添加一个功能,让用户有机会将这些图片传输到他/她的 PC 或 Mac。

我真的不知道该怎么做。最好的方法是什么,使用 Bonjour、蓝牙或直接 USB(如果可能的话)?在这一点上我真的需要一些建议......

有任何想法吗 ?

PS:原谅我的英语,我是法国人:-)

0 投票
4 回答
1660 浏览

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

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

PS我对PHP特别感兴趣。

0 投票
3 回答
28135 浏览

networking - 我可以从命令行使用 Bonjour 吗?

是否可以从命令行使用 Bonjour?例如,如果我想注册一个服务,我输入类似的内容:bonjour -register service_name port。然后 Bonjour 为我的服务分配一个免费 IP。或者,例如,如果我想查看可用服务的列表,我可以输入如下内容:bonjour -showServices。然后我得到所有可用服务的列表及其名称、IP 地址和端口。存在这样的东西吗?

我对可用的文档感到困惑。例如在这里,在文档的开头我看到:

要注册您的服务,请调用 DNSServiceRegister。

我应该在哪里称呼它?在命令行中?在 Java 中?在 C++ 中?在蟒蛇?没有提供这种上下文有点奇怪。

一般来说,我只找到有关 zeroconf 和 Bonjour 的一般信息(它应该做什么)。但我找不到具体而简单的东西。像 Bonjour 使用的“Hello World”示例。

有人可以帮我吗?

0 投票
3 回答
1058 浏览

iphone - iPhone:如何将文件从应用程序目录共享/移动到其他设备

我有一个应用程序,它在应用程序目录中生成一些文件

我需要用户能够通过 wifi 上的文件共享、使用网络浏览器、ftp 客户端或其他类似方法从另一台设备/计算机访问文件。

iPhone可以自己充当http服务器和ftp服务器还是我需要做一些编程来自己制作http服务器和ftp服务器?

谢谢

开发者

0 投票
6 回答
473 浏览

java - 为什么要以如此复杂的方式完成?是面向对象的思维方式吗?

我正在尝试使用 Java 中的 Bonjour。我找到了一个如何做的例子,我想我理解了。但我仍然不明白为什么要以如此复杂的方式完成。可能是我错过了什么。

所以,我发现的代码以下列方式工作(代码也在下面给出)。

  1. Java 程序尝试查找服务,如果找到该服务,程序会尝试“解析”该服务(我认为“解析服务”的意思是“使用服务”或“连接到服务”)。

  2. 要“解析”找到的服务,我们需要调用“DNSSD.resolve”方法,并且作为该方法的最后一个参数,我们需要提供一个对象。

  3. “DNSSD.resolve”尝试解析给定的服务。如果“DNSSD.resolve”能够解析服务,它会调用作为最后一个参数给出的实例的“serviceResolved”方法。如果“DNSSD.resolve”无法解析服务,则调用上述对象的“operationFailed”方法。

这是代码:

用下面的方式组织代码会不会更简单。

  1. 我们使用有关我们要解析的服务的信息调用“DNSSD.resolve”方法。

  2. 我们不会将任何对象传递给“DNSSD.resolve”。

  3. “DNSSD.resolve”不调用任何类的任何方法。

  4. “DNSSD.resolve”试图“解析”给定的服务,如果它能够做到,“DNSSD.resolve”返回真。否则返回false。

  5. 程序根据“DNSSD.resolve”返回的值运行“serviceResolved”或“operationFailed”方法。

还是我只是不习惯 OOP 的思维方式?

0 投票
1 回答
185 浏览

java - 该程序是否引入了并行执行?

这是一个使用 Bonjour 并用 Java 编写的简单服务器应用程序。代码的主要部分在这里给出:

我通过以下方式理解它。我们可以尝试注册一个调用“registerService”方法的服务,该方法又调用“DNSSD.register”方法。“DNSSD.register”尝试注册服务,一般情况下,它可能会得到两个结果:服务“注册成功”和“注册失败”。在这两种情况下,“DNSSD.register”都会调用作为最后一个参数提供给 DNSSD.register 的对象的相应方法(“serviceRegistered”或“operationFailed”)。程序员决定将什么放入“serviceRegistered”和“operationFailed”。很明显。

但是我应该尝试从“operationFailed”注册服务吗?恐怕这样我的应用程序会过于频繁地尝试注册服务。我应该在“操作失败”中添加一些“睡眠”还是“暂停”?但无论如何,在我看来,当应用程序无法注册服务时,它也将无法做其他事情(例如处理 GUI)。或者可能是 DNSSD.register 引入了某种并行性?我的意思是它启动了一个新线程,但是如果我尝试从“操作失败”注册服务,我可以生成大量线程。会发生吗?如果是这种情况,它应该是一个问题吗?如果是这样,我该如何解决这个问题?

0 投票
1 回答
433 浏览

java - Bonjour 可以浏览具有特定名称的服务吗?

Bonjour 提供“DNSSD.browse(serviceType,callBackObject)”方法来浏览特定类型的服务。如果找到给定类型的服务,Bonjour 将调用“callBackObject.serviceFound”。如果服务丢失,Bonjour 会调用“callBackObject.serviceLost”。

我一直认为“DNSSD.browse”是一种监控特定服务的方法。Bonjour 监视特定服务并在服务被发现(可用)或丢失(不可用)时调用必要的方法。

但是我意识到“DNSSD.browse”接收(作为参数)一种服务类型(例如“ http .tcp”)并且可以有多个这种类型的服务。因此,如果找到或丢失任何指定类型的服务,它可能分别调用“serviceFound”和“serviceLost”。

但在我的应用程序中,我只想浏览一项特定的服务。最好的方法是什么?我有两个潜在的解决方案:

  1. 当我注册一个服务时,我给它一个唯一的类型。例如:“ server1.http .tcp ”。

  2. 我注册具有唯一名称(不是类型)的服务,并要求 Bonjour 浏览具有特定名称的服务。但我不确定 Bonjour 是否提供这种可能性。它可以浏览具有特定名称的服务吗?

0 投票
1 回答
698 浏览

java - 与 Bonjour 沟通的最佳方式是什么?

Bonjour 提供了一个不错的方法:DNSSD.browse("_killerapp._tcp", this);. 作为该方法的第一个参数,我给出了可能在网络中可用的服务类型,作为第二个参数,我给出了一个“回调对象”。所考虑的方法“浏览”指定类型的服务(第一个参数)。

在浏览过程中,它可以“找到”然后“丢失”一项服务。如果服务被发现(丢失),则调用回调对象的 serviceFound (serviceLost) 方法。使用找到的服务的一些参数调用 serviceFound。详细信息:

但是要获取服务的IP地址和端口,我们需要做额外的操作(人们称之为“解析服务”)。这逻辑对我来说有点奇怪。为什么 serviceFound 不能提供这些信息?我的意思是为什么 Bonjour 在找到服务时无法自动解析服务。

无论如何,我只是接受给定的逻辑并尝试使用它。从serviceFound我打电话DNSSD.resolve(0, ifIndex, serviceName, regType, domain, this)

和之前一样,我给resolve(最后一个参数)一个回调对象。不幸的是,我需要使用不同的类来为browse和提供回调对象resolve。原因是browseandresolve可以调用operationFailed回调对象的方法,如果我使用同一个类的回调对象,我将不知道哪个方法正在调用operationFailed(browseresolve)。

因此,我创建了一个单独的类来实例化该resolve方法的回调对象。在这个类中,我有一个serviceResolved名为 Bonjour 的方法,它使用已解析服务的 IP 地址和端口调用:

我认为IP地址和端口应该是执行浏览的对象的字段。因此,在serviceResolved我有 IP 和端口中,我想将这些值设置为browse服务实例的相应字段。但是我该怎么做呢?此实例不作为serviceResolved方法的参数给出。所以,它是看不见的!

此外,我看到 serviceResolved 和 serviceFound 将 . 作为第一个参数DNSSDService resolver。有人知道它是什么吗?可能这个对象可以用来设置服务的参数吗?我知道这种类型的对象是由browse.

0 投票
5 回答
31919 浏览

android - 如何在 Android 上发现 zeroconf (Bonjour) 服务?我在使用 jmDNS 时遇到问题

我正在使用 Droid / Android 2.0.1 并且显然遇到了很多人都遇到的问题:我无法使用我所知道的一个纯 Java zeroconf 库 jmDNS 来发现服务。(Apple 的 Bonjour,虽然它可以在 Linux 和 Windows Java 上运行,但我相信由于依赖本机代码,它更难移植到 Android。)

我可以创建服务,但不能发现它们。我试图弄清楚发生了什么。

这里有一个持续的问题报告;与多播和 IPv6 相关,但似乎也抛出了 jmDNS 的用户: http ://code.google.com/p/android/issues/detail?id=2323

知道为什么这个人可能会成功吗?请参阅错误报告中的评论 22。(我是 SO 新手,所以不能发布多个 URL。)

我已经测试了他们的代码,但没有任何运气。

有没有人使用 jmDNS 或其他库在 Android 上成功完成 zeroconf 服务发现?

我的发现问题是否可能与 IPv6 多播问题有关?