【问题标题】:How to advertise a service using Bonjour across subnets?如何使用 Bonjour 跨子网宣传服务?
【发布时间】:2011-04-14 17:57:57
【问题描述】:

我熟悉 Bonjour 在“本地”域上的广告服务的使用。我已经完成了几个示例,并且知道我使用的相应 Cocoa 类。

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

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

【问题讨论】:

  • 你确定这是一道编程题吗?对我来说,这听起来更像是网络配置问题。

标签: iphone cocoa networking bonjour dns-sd


【解决方案1】:

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

Bonjour 支持两种服务器通知客户端其存在的机制,首先是本地网络上的多播,其次是 DNS。

组播很容易使用,因为没有设置,可惜只能在同一个网络上使用。

DNS 可以跨路由器(互联网)工作,但它需要正确配置的名称服务器和使用该名称服务器的客户端。

我认为你只有两个选择。

  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

这会将名为“Stack Overflow”的“http”服务注册为 Bonjour 服务。检查一下 - 在终端中运行它并在 Bonjour 下的 Safari 的书签中检查它。注册应用程序的方式相同。

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

第二个选项有点吓人,但如果你愿意参与一些管理,这没什么大不了的。

同样,您不需要在 DNS 中动态注册服务。您可以在 DNS 配置中简单地硬编码您的 Mac 名称和应用程序的端口。这些只是需要添加到区域文件(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 类型的服务“iCool App Service”可用。第四行告诉客户端当前服务的地址和端口。

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

您可以在 Mac、某些 Linux 机器上运行名称服务器,也可以使用 dyndns.com 等服务。

希望这会有所帮助。

【讨论】:

  • 好吧,如果你在 WiFi 网络上没有任何盒子,但你有更多的 iOS 设备,你可以创建一个小应用程序,将你的 Mac 的应用程序注册到 WiFi 网络上。
  • 感谢一大群人,这真的让我明白了。我在想这在编程方面有所不同。
  • 嘿伙计,我用我写的应用程序写了一篇博客文章来宣传我的 bonjour 服务。我还可以让我的待办事项经理Things 在我的办公室使用这种技术进行同步。我使应用程序通用,并将代码放在 GitHub 上。 saygoodnight.com/?p=170 再次感谢。
  • 太棒了,我相信人们会发现它很有用。我很高兴能帮上忙。
  • 当我尝试使用 Firefox DNSSD 插件时,StackOverflow 示例失败,因为 com.但看起来这似乎是 StackOverflow 服务器本身的问题(它对以点结尾的主机名不满意)。我说的对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 2012-09-01
相关资源
最近更新 更多