这不是一个典型的编程问题,但我认为这是测试基于 Bonjour 的代码的一个巨大障碍。
Bonjour 支持两种服务器通知客户端其存在的机制,首先是本地网络上的多播,其次是 DNS。
组播很容易使用,因为没有设置,不幸的是它只能在同一个网络上使用。
DNS 可以跨路由器(Internet)工作,但它需要正确配置的名称服务器和使用该名称服务器的客户端。
我认为你只有两个选择。
- 在 WiFi 网络上宣传您的 Bonjour 服务
- 配置自己的 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 这样的服务。
希望这可以帮助。