2013-06-09 6 views
6

나는 항상 인터넷에 연결되어 있어야하는 Java 프로젝트를 작업 중입니다.Java에서 인터넷 연결을 확인하는 방법

내 프로그램이 인터넷 연결이 감지되는 즉시 일부 시간 간격 (예 : 5 또는 10 초)에 인터넷 연결을 계속 확인하고 메시지를 표시하려고합니다.

try 
{ 
    InetAddress add = InetAddress.getByName("www.google.com"); 
    if(add.isReachable(3000)) System.out.println("Yes"); 
    else System.out.println("No"); 
} 
catch (UnknownHostException e) 
{ 
    System.out.println("unkownhostexception"); 
} 
catch (IOException e) 
{ 
    System.out.println("IoException"); 
} 

그러나이 코드는 항상 "아니오"를 반환 -

나는 아래의 코드는,이 기능을 달성하기 위해의 isReachable 방법을 사용하는 것을 시도했다. 이 코드의 문제점은 무엇입니까?

감사

+1

http://stackoverflow.com/questions/9922543/why-does-inetaddress-isreachable-return-false-when-i-can-ping -the-ip-address – uselpa

+0

감사하지만 솔루션이 거기에서 제공되지만 내 경우에는 작동하지 않습니다. 저자는 너무 단순한 해킹이 어떤 경우에는 작동하지 않을 수도 있다고 말했다. –

답변

9

난 당신이은 항상하고 실행하고 연결할 수 호출 사이트에서됩니다 알고 의미에서 알려진 몇 가지 알려진 호스트로 패킷을 보내는의 알고있는 유일한 방법.

그러나 예를 들어 명명 된 호스트를 선택하면 DNS 조회가 실패하여 ping이 실패 할 수 있습니다.

나는이 문제에 대해 걱정할 필요가 없다고 생각한다. 프로그램이 인터넷 연결을 필요로한다면 데이터를 보내거나 받기 때문이다. 연결은 연속적인 개념이 아닙니다.은 강과 같지만 길과 같습니다. 따라서 연결 오류를 처리하기 위해 Java 표준을 사용하십시오. IOExceptions. 프로그램이 데이터를 보내야 할 때, 네트워크가 다운 된 경우 기본 API가 인증을 던져 버릴 것이다. 프로그램이 데이터를 예상하는 대신 시간 초과 또는 이와 유사한 것을 사용하여 네트워크 스택의 가능한 오류를 감지하고이를 사용자에게보고하십시오.

15

자주 인터넷을 사용해야하는 경우 Raffaele의 제안에 동의합니다. 그냥 시도하고 실패 할 때 예외를 처리 할 준비를하십시오.

어떤 이유로 인터넷의 가용성을 모니터링해야하는 경우, 아직 사용하지 않고 누구에게 연결할지 모를 경우에도 잘 알려진 제품에 연결을 시도하십시오 사이트 (google.com, amazon.com, baidu.com ...).

이 몇 사이트를 테스트하기 위해 노력할 것 :

public static void main(String[] args) { 
    System.out.println(
     "Online: " + 
     (testInet("myownsite.example.com") || testInet("google.com") || testInet("amazon.com")) 
    ); 
} 


public static boolean testInet(String site) { 
    Socket sock = new Socket(); 
    InetSocketAddress addr = new InetSocketAddress(site,80); 
    try { 
     sock.connect(addr,3000); 
     return true; 
    } catch (IOException e) { 
     return false; 
    } finally { 
     try {sock.close();} 
     catch (IOException e) {} 
    } 
} 
+1

네, 비슷한 일을하고 있습니다. 고마워요! –

+0

정말 고마워요. testInet() 메소드는 트릭을 수행합니다. – russellhoff

관련 문제