所以最初,我想使用像#34; http://myhostname:123/path/to/file"这样的网址通过HTTP GET访问文件。我的浏览器可以毫无问题地访问它,因此下一步是将其从Java代码中删除。
URL url = new URL("http","myhostname",123,"path/to/file");
URLConnection openConnection = url.openConnection();
HttpURLConnection asHttp = (HttpURLConnection) openConnection;
assertEquals(200, asHttp.getResponseCode());
可悲的是,我遇到了暂停。我正在用Wireshark嗅闻,无法通过电线看到请求。
然后我尝试使用IPv6地址完全相同的URL,我可以看到请求通过网络,但服务器回答HTTP 400,因为他不喜欢看不到" myhostname"写入标题。
InetAddress.getByName("myhostname").isReachable(5000)
也没有工作,但与IPv6合作。
在cmd.exe上使用ping命令时,我可以使用" ping myhostname"成功ping。我有一些C#代码,在使用" myhostname"时运行也很好。 但是为什么它不能用Java工作?我需要做些什么才能使它正常运行?
注意:我想要访问的主机是在我的电脑上运行的虚拟机。由于我没有网络编程经验,所以我可能会想到一件简单的事情。
答案 0 :(得分:1)
好吧,我可以解决我的问题:
正如@Andreas建议我尝试ping -4 myhostname
并解析了IPv4地址,但是ping超时了。
我通过编辑C:\Windows\System32\drivers\etc
中的主机文件并添加了行1234::1234:1234:1234:1234%2 myhostname
来解决了这个问题。我使用ping -4 myhostname
重新检查了但现在它没有解析地址,而ping myhostname
使用IPv6工作正常。我的Java代码正好运行完毕。
我还使用System.setProperty("java.net.preferIPv6Addresses", "true");
进行了重试,并且它使用了一个简单的main() - 方法,但它没有使用JUnit-Test。