我熟悉Bonjour在“本地”域中的广告服务的用法。我曾努力研究过几个示例,我知道我使用的相应的可可班。

我很好奇我如何将简单的Bonjour服务宣传到其他子网。具体来说,我正在尝试编写在我的桌面上运行的网络服务,该网络通过以太网连接。客户端在通过WiFi连接的移动设备(iPhone/iPad)上运行。在我的网络设置中,wifi与以太网不同。但是,两者都在防火墙后面。我无需在防火墙之外做广告,我只是希望WiFi客户端可以看到以太网连接服务器广告宣传的服务。

这可能吗?我知道Bonjour应该支持跨子网的通信,但是每当我尝试阅读此功能时,它都会深入DNS Records和Whate。我是一个应用程序开发人员...我对这些东西一无所知,也不希望用户不必担心它。我错过了简单的东西吗?

有帮助吗?

解决方案

这不是一个典型的编程问题,但我认为这是测试基于Bonjour的代码的巨大障碍。

Bonjour支持服务器的两种机制,以告知客户的存在,首先是本地网络上的多播,DNS第二。

多播很容易使用,因为没有设置,不幸的是,它只能在同一网络上使用。

DNS具有跨路由器(Internet)工作的奢侈,但是它需要使用该名称服务器正确配置名称服务器和客户端。

我认为您只有两个选择。

  1. 在WiFi网络上宣传您的Bonjour服务
  2. 配置自己的DNS

在第一种情况下,重要的是要意识到该服务不一定必须通过在Mac上运行自己的应用程序来宣传。您可以使用实用程序 dns-sd 将任何IP地址/端口注册为网络上的Bonjour服务。为此,您需要连接到WiFi的机器(Mac,Linux),并运行 dns-sd 以类似的方式有:

dns-sd -P "Stack Overflow" _http._tcp . 80 stackoverflow.com 69.59.196.211

这将以名称“堆栈溢出”为Bonjour服务注册“ HTTP”服务。检查一下 - 在终端运行,并在Bonjour下的Safari书签中检查它。您可以注册申请的方式相同。

不幸的是,您需要在连接到WiFi网络的机器上运行此操作。这意味着您的Mac应用程序将在其自己的以太网网络上做广告, dns-sd 在wifi上做广告。

第二种选择有点令人恐惧,但是如果您愿意与某些政府弄脏手相关,这没什么大不了的。

同样,您无需在DNS中动态注册服务。您可以简单地将Mac的名称和应用程序端口硬编码在DNS配置中。这些只是需要添加到区域文件(DNS配置文件)的4行。

b._dns-sd._udp  IN PTR @   ;  b = browse domain
lb._dns-sd._udp IN PTR @   ; lb = legacy browse domain
_icool._tcp  PTR iCool\ App\ Service._http._tcp
iCool\ App\ Service._http._tcp     SRV 0 0 8888 macpro.domain.com.

前两行告诉客户端(在您的情况下iOS设备),该域已启用Bonjour。第三行告诉客户,有一个类型的服务“ ICool App Service” icool 可用的。第四行告诉客户当前地址和服务端口。

客户将寻找其配置(或通过DHCP获得)“搜索域”的DNS条目。检查您的网络设置。

您可以在Mac,一些Linux框上运行名称服务器,也可以使用Dyndns.com之类的服务。

希望这可以帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top