2013-08-17 2 views
3

У меня есть приложение Java, которое запускается каждые 10 минут. Поэтому всякий раз, когда поток начинает выполняться, я должен проверить, есть ли подключение к Интернету или нет. Поэтому я использовал для этого класс Socket. Но проблема здесь в том, что класс сокетов отлично работает, если провод не подключен к моей системе. Для меня, если я подключу провод, тогда у меня есть LAN, но нет интернета. В этом случае класс сокета не может выдать ошибку. Вот мой код -проверить подключение к интернету в java

Socket socket = null; 
    try { 
     socket = new Socket("www.google.com", 80); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally {    
     if (socket != null) try { socket.close(); 

     } 
     catch(IOException e) { 
      e.printStackTrace(); 
     } 
     System.exit(0); 
    } 

Я проверил код здесь - Detect internet Connection using Java. Но использование getContent() не помогает.

+0

Не имеет отношения к вашей проблеме, но вы должны знать, что раздел 'finally' не будет выполнен, если catch будет вызывать' System.exit (0) '(по крайней мере, в Java7). – Pshemo

ответ

1

Вы пробовали?

boolean hasInternetAccess = InetAddress.getByName("www.google.com").isReachable(); 
+1

это всегда возвращает false – Dan

1

Вы должны просто попытаться подключиться к тому, что вам нужно для подключения, и обработать неисправность по мере ее возникновения. Магического предиктора успеха нет.

0

Два ответа. 1. Код ссылки является хорошим. Вам в основном нужно получать данные из URL-адреса, чтобы убедиться, что он действительно доступен. Я бы дополнительно настроил соединение с setUseCaches(false) 2. Ваша передняя проверка не поможет вам. Вы все равно можете потерять соединение на полпути вниз по вашей программе. Итак, просто запустите свой код. Когда он обнаруживает проблему подключения, распечатайте ошибку пользователю с изяществом.

Смежные вопросы