처음에는 "http://myhostname:123/path/to/file"과 같은 URL을 사용하여 HTTP GET을 통해 파일에 액세스하려고했습니다. 내 브라우저는 아무런 문제없이 액세스 할 수 있으므로 다음 단계는 자바 코드에서이를 제거하는 것입니다.IPv6가 잘 작동하는 동안 호스트 이름을 사용하는 HttpURLConnection 및 INetAddress가 실패합니다.
슬프게도 시간 초과되었습니다. 나는 Wireshark로 냄새를 맡고 있었고 그 요청을 전선으로 볼 수 없었다.
그렇다면 IPv6 주소와 정확히 같은 URL을 시도했는데 헤더를 통해 "myhostname"을 보지 못했기 때문에 서버가 HTTP 400으로 요청에 응답했습니다.
InetAddress.getByName("myhostname").isReachable(5000)
도 작동하지 않지만 IPv6에서 작동합니다. cmd.exe에서 ping 명령을 사용할 때 "ping myhostname"을 사용하여 성공적으로 ping을 수행 할 수 있습니다. "myhostname"을 사용할 때 잘 실행되는 C# 코드가 있습니다. 하지만 Java로 작동하지 않는 이유는 무엇이며 작동하도록하려면 어떻게해야합니까?
참고 : 액세스하려는 호스트는 내 PC에서 실행되는 가상 컴퓨터입니다. 나는 네트워크 프로그래밍에 경험이 없기 때문에 내가 누락 된 간단한 일이 될 수있다.
'ping myhostname'을 실행하면 IPv4 또는 IPv6을 ping합니까? 나는 IPv6을 가정 할 것이고, 따라서'ping -6 myhostname'을 실행하면 같은 결과가 나온다. 그런 다음'ping -4 myhostname'을 실행하면 IPv4를 올바르게 ping합니까? – Andreas
DNS가 IPv4 및 IPv6 주소를 모두 반환하지만 IPv4 주소가 작동하지 않으면 Java가 * 기본적으로 * IPv4 주소를 사용하기 때문에 DNS를 수정하십시오. 브라우저와 C# 프로그램은 기본적으로 IPv6 주소를 사용합니다. DNS가 둘 다 반환하면 둘 다 작동해야하기 때문에 어느 쪽을 사용하든 상관 없습니다. * 해결 방법 : * Java에 IPv6 주소를 사용하도록 알려주십시오. 참고 : [Java - 어떻게 IPv6를 선호합니까?] (http://stackoverflow.com/q/19314241/5221149) – Andreas
@Andreas 예, 'ping myhostname'은 IPv6을 핑합니다. 나는'System.setProperty ("java.net.preferIPv6Addresses", "true");를 시도하면서 이미 실패했다. ... ... 여전히 시간 초과인지 또는 다른 예외인지는 잘 모르겠다. 나중에 다시 확인해. 방금 jvm-arguments를 사용하여 "bullet-proof"버전이 있다는 것을 읽었고,이를 확인해야합니다. 그럼에도 불구하고 이것이 해결 방안이 될 것입니다 - 당신이 말했듯 - DNS를 고치는 것 - 그러나 그 방법은 - 지금 당장 내 초점에있는 것처럼 보입니다. 고맙습니다. – Bastian