首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Bonjour跨子网发布服务?

如何使用Bonjour跨子网发布服务?
EN

Stack Overflow用户
提问于 2010-09-20 23:16:49
回答 1查看 9.4K关注 0票数 9

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

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

这个是可能的吗?我知道Bonjour应该支持跨子网通信,但每当我尝试阅读此功能时,它都会深入研究DNS记录和诸如此类的东西。我是一个应用程序开发人员……我对这些东西一无所知,也不想让用户担心它。我错过了什么简单的东西吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-24 05:18:51

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

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

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

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

我想你只有两个选择。

  1. 在您自己的WiFi

上为您的bonjour服务做广告

在第一种情况下,重要的是要认识到服务不一定要由运行在Mac上的您自己的应用程序来广告。您可以使用实用程序dns-sd将任何IP地址/端口注册为网络上的Bonjour服务。为此,您需要一台连接到您的WiFi的机器(Mac、Linux),并以类似的方式在那里运行dns-sd

代码语言:javascript
复制
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行代码。

代码语言:javascript
复制
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应用服务“可用。第四行告诉客户端服务的当前地址和端口。

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

你可以在你的Mac或者Linux机器上运行域名服务器,或者你可以使用像dyndns.com这样的服务。

希望这能有所帮助。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3752837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档