我正在尝试在我的局域网中运行HTTP服务器,并希望通过在另一台台式机上使用浏览器来访问它。由于我不喜欢手动输入IP地址和端口,我尝试使用jmDNS设置mDNS。
String type = "_http._tcp.local.";
jmdns = JmDNS.create();
jmdns.addServiceListener(type, listener = new ServiceListener() {
@Override
public void serviceResolved(ServiceEvent ev) {
Log.d(LogTag.SERVER, "Service resolved: " + ev.getInfo().getQualifiedName() + " port:"
+ ev.getInfo().getPort());
}
@Override
public void serviceRemoved(ServiceEvent ev) {
Log.d(LogTag.SERVER, "Service removed: " + ev.getName());
}
@Override
public void serviceAdded(ServiceEvent event) {
// Required to force serviceResolved to be called again (after the first search)
jmdns.requestServiceInfo(event.getType(), event.getName(), 1);
}
});
serviceInfo = ServiceInfo.create(type, NAME, PORT, "test service");
jmdns.registerService(serviceInfo);
mDNS条目显示在ZeroConf Browser应用程序上就好了。 IP和端口可以很好地访问服务器。
在Windows 7上,将.local TLD(= http://roseblade.local/)的名称输入任何地址栏(Firefox,Chrome,Safari,IE)并没有太大作用,而我的研究显示这几乎是徒劳的无论如何。我安装了Apple Bonjour,但这只能帮助运行Hobbyist Software的Bonjour浏览器。 就Linux而言,我尝试使用elemantaryOS和Midori,但这也行不通。 我目前无法使用OSX或iOS。
如何在我的浏览器中使用.local地址的分辨率(Firefox,Chrome,Linux,OSX或Windows7上的任何内容)?难道我做错了什么?在这一点上,我只想验证mDNS可以像在系统上那样工作。
对此问题的重要指示也表示赞赏。
答案 0 :(得分:1)
mDNS地址解析通过在网络上组播DNS查询来工作。通过绑定到UDP端口,侦听查询并回答它们,您可以向mDNS客户端提供DNS记录。为此,您可以使用现有的mDNS服务器,如avahi-daemon,或者,如果您需要自定义功能或与您的应用程序集成,请使用Node.js的multicast-dns等实现一个。
然而,根据我的经验,这是相当有趣的。一些网络配置会干扰mDNS解析,一些操作系统(例如iOS 8,请参阅有关发现与mDNSResponder的整个争论)。