4

我用 Java 编写了一个 Windows 服务,它会自动启动(在用户登录 Windows 之前)。我的问题是该服务在登录之前似乎无法访问网络。

在日志中我看到登录之前,我得到:java.net.UnknownHostException。但是,登录后相同的代码可以正常工作。

我试图将服务定义为“网络服务”,但没有帮助。

有人可以帮忙吗?

顺便提一句:

  1. 不涉及 WiFi

  2. 我查看了 TeamViewer 程序的工作原理,发现它们在 FirewallPolicy 中有一些注册表值。他们将他们的服务定义为本地系统。这让我觉得这可能与防火墙设置有关,但是我在网上找不到任何关于它的信息。

4

2 回答 2

2

我只是设法解决了这个问题。问题是该服务在可以访问互联网之前启动。请记住,网络可能可以访问,但互联网不能。

我通过这样做解决了它:(伪代码)

while (false) {
    check if http://www.example.com is accesible:
        if true - break
        if false - sleep for 3 seconds
}
... (rest of the code)
于 2014-12-14T09:39:16.023 回答
0

如果异常是UnknownHostException,这将意味着 DNS 解析以某种方式失败..

进一步注意,DNS 解析本身取决于 IP。因此,如果有问题的机器连接到相应的网关(路由器)很慢,那么 DNS 解析就没有成功的机会。

因此,虽然您可能会尝试在睡眠循环中解决主机分辨率(如 Kuf 建议的那样).. 我建议尝试记录机器在重新启动后多久获得 IP 地址(表示多久的标志它连接到网络),然后从那里开始(可能是其他超级用户或服务器故障问题)。

于 2014-12-14T20:24:05.160 回答