2016-07-14 2 views
3

1 년 전에 프로그램을 작성했으며 오늘이 프로그램을 사용하여 흥미로운 결과를 얻는 것을 보았습니다. 한 종류의 네트워크에서 PC 또는 노트북을 감지합니다. InetAddress 클래스를 사용하고 있습니다. 내 프로그램은 Java 1.8.x가 실행 컴퓨터에서 실행될 때까지 InetAddress.isReachable()이 그 IP 주소에 시스템이없는 경우 나에게 "TRUE"를 제공하는 것보다 어떻게 작동해야합니까?JRE 1.7.x에서와 같이 Java InetAddress.isReachable()이 JRE 1.8.x에서 작동하지 않는 이유

private String ipAddress = "192.168.1.200"; 
inetAddr = InetAddress.getByName(ipAddress); 
inetIsReachable = inetAddr.isReachable(8000); 
debug += " INET is reachable: " + inetIsReachable; 
System.out.println(debug); 

정말 이상합니다.이 오류를 감지하는 방법을 모르겠습니다.

종류는 프로토 관련하여

°°°°° 내가

그러나 명령 행에 ping이 기계에 도달 자바 1.7

inetAddr = InetAddress.getByName(ipAddress); 
    inetIsReachable = inetAddr.isReachable(8000); 
// FALSE 
    byte[] a = new byte[]{(byte) 192,(byte) 168,1,(byte) 200}; 
    inetAddr = InetAddress.getByAddress("192.168.1.200", a); 
    inetIsReachable = inetAddr.isReachable(8000); 
// also FALSE 
에서 실행 ...이 코드를 시도

편집!

°°°°° EDIT-2

자바 1.8

192.168.1.200 - InetAddress를 진정한 - cmd를 핑 진실 - 기계

192.168.1.202이 -의 InetAddress 사실 - cmd를 핑 거짓은 - 어떤 기계

에게

0 자바 1.7이 없다

192.168.1.200 - InetAddress를 거짓 - 진실 cmd를 핑 - InetAddress를 거짓 - -이 bug #JDK-8159410처럼 보이는 어떤 기계

+2

이것을 디버깅하려면 Wireshark와 같은 도구를 사용하여 네트워크 트래픽을 감시해야합니다. –

+1

'getByName' 대신'getByAddress'를 시도해 보셨습니까? 그 주소에 대한 cmd/bash에서 핑을 시도 할 때 무엇을 볼 수 있습니까? 방화벽/안티 바이러스가 실행 중입니까? 한때 AntiVirus 소프트웨어가 다른 방법으로는 가져 가지 않은 컴퓨터의 포트에서 ssh/telnet을 수락한다는 문제가있었습니다. 당신은 연결 만 할 수 있었고 나머지는 죽었지 만 코드가 그런 식으로 가용성을 테스트했기 때문에 두통을 겪고있었습니다. 여기에 다른 이야기가 있지만 네트워킹을 통해 "이상한"것이있을 때 가장 먼저 확인하는 것 중 하나입니다. – Fildor

+2

나는 이것을 '1.7.0_80' (8 초 후에'false'를 출력)과 1.8.0_101-ea (같은 코드로 바로'true'를 출력)로 재현 할 수 있습니다. 관련이있을 수있는 버그 수정이 적어도 하나 있었지만 (http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7163874), Java 7u45로 백 포트되었으므로 문제는 여전히 동일해야합니다. 7에서 8 사이입니다. 어떤 운영 체제에서 응용 프로그램을 실행하고 있습니까? 그리고 정확히 어떤 JRE 버전을 사용하고 있습니까? –

답변

1

없다 false- cmd를 분명히 8u73 이후 도입 핑 기계

192.168.1.202가 .