我正在用Java开发一个Web应用程序(使用Spark),我希望它能够使用JmDNS在我的Android应用程序中找到这个服务器。我正在跟踪JmDNS page的服务注册步骤,我的代码如下:
try {
// Create a JmDNS instance
JmDNS jmdns = JmDNS.create(InetAddress.getLocalHost());
// Register a service
ServiceInfo serviceInfo = ServiceInfo.create("_http._tcp.local.", "smart_dom", 4567, "path=index.html");
jmdns.registerService(serviceInfo);
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (InterruptedException e) {
e.printStackTrace();
}
我实现了关于在我的Android应用中发现服务的部分,但它什么也没找到。我根据this question进行了一些更改,甚至下载了ZeroConf浏览器(它依赖于JmDNS),但即使这个应用程序也看不到我的网络应用程序。
我的服务器在Windows PC上运行。我知道Windows并不支持mDNS,但Java应该与平台无关。我能做错什么?
答案 0 :(得分:0)
如果有人想知道出了什么问题,我找到了答案。
在我的情况下问题是JmDNS jmdns = JmDNS.create(InetAddress.getLocalHost());
,尤其是InetAddress.getLocalHost()
返回127.0.0.1而不是我的LAN适配器wi-fi地址。使用this解决方案解决了该问题。它基于通过NetworkInterface.getNetworkInterfaces()
寻找正确的界面。