问题描述
我在iPhone上发布了Bonjour _http._tcp。 服务。使用iPhone Wifi 关闭;在MacBook的终端上运行以下dns-sd命令:
dns-sd -B _services._dns-sd._udp
然后使用USB照明电缆将iPhone连接到MacBook,dns-sd将发现以下iPhone服务:
Timestamp A/R Flags if Domain Service Type Instance Name
19:22:45.126 Add 3 5 . _tcp.local. _http
从MacBook断开USB照明电缆将显示:
Timestamp A/R Flags if Domain Service Type Instance Name
19:22:45.126 Add 3 5 . _tcp.local. _http
19:23:53.924 Rmv 1 5 . _tcp.local. _http
但是,在Windows 10 PC上重复上述步骤(运行dns-sd,将USB Lighting连接到PC并断开与PC的连接), dns-sd 没有发现该服务。
使用iPhone Wifi 打开,PC上的dns-sd会发现iPhone服务:
Timestamp A/R Flags if Domain Service Type Instance Name
19:32:36.238 Add 2 13 . _tcp.local. _http
当iPhone Wifi关闭时,PC上的dns-sd将显示:
Timestamp A/R Flags if Domain Service Type Instance Name
19:32:36.238 Add 2 13 . _tcp.local. _http
19:33:38.471 Rmv 0 13 . _tcp.local. _http
我从https://developer.apple.com/download/more/?=Bonjour%20SDK%20for%20Windows;安装了Bonjour SDK v333.10,iTunes也可以在PC上正常工作(可以显示iPhone)。
为什么PC上的dns-sd(Bonjour / ZeroConf)无法通过USB找到iPhone服务?
非常感谢。
解决方法
Bounjour通信基于Socket。通过USB电缆将iPhone连接到MacBook时,MacBook会为iPhone分配一个专用IP地址(169.254.x.x)。
使用MacBook上的Discovery - DNS-SD Browser,当iPhone的wifi处于关闭状态时,Discovery通过USB显示发现的Bonjour服务,并具有专用IP地址:
当iPhone的wifi开启时,发现将显示具有两个IP地址(一个wifi和一个USB)的发现的Bonjour服务:
因此,MacBook上的 dns-sd 能够在没有wifi的iPhone上发现该服务。