2015-07-19 11 views
0
public boolean isReachable(String ipAddress, int port, int timeout) 
{ 
    Socket socket = new Socket(); 
    Exception exception = null; 
    try { 
     socket.connect(new InetSocketAddress(ipAddress, port), timeout); 
    } 
    catch (IOException e) { exception = e; } 

    finally { 
     try { socket.close(); } catch (Exception e) {e.printStackTrace(); } 
    } 
    return exception == null; 

} 

Этот код работает, когда я подключен к Интернету. но он также работает, когда я отключен от стороны интернет-провайдера (например, когда срок службы объявлений истек или трафик завершен). , пожалуйста, скажите мне, где проблема?как проверить подключение ip-адреса на конкретном порту?

+0

Вы можете попробовать с помощью этого блока кода? попробуйте { socket.connect (новый InetSocketAddress (ipAddress, порт), таймаут); \t return true; } catch (Exception e) {return false; } –

ответ

0

Вы должны пойти на InetAddress, который имеет метод isReachable(), что по документации должны:

общественного логический isReachable (интермедиат таймаут) бросает IOException

Тест доступен ли этот адрес. Наилучшие усилия предпринимаются при реализации, чтобы попытаться добраться до хоста, но брандмауэры и сервер конфигурация может блокировать запросы, приводящие к недостижимому состоянию , в то время как некоторые определенные порты могут быть доступны. Типичная реализация будет использовать запросы ICMP ECHO, если эта привилегия может быть получена, , иначе она попытается установить TCP-соединение на порту 7 (Echo) хоста назначения.

1

Стратегии блокирования трафика варьируются от ISP до ISP. Единственный надежный способ проверить, действительно ли сайт действительно доступен, - попытаться получить фактический поток ответов и проанализировать его.

Очевидным способом для HTTP-сервера было бы использовать URLConnection, отправить GET/request, проверить, соответствует ли код ответа 200. Но нет универсального способа проверки какого-либо сервера - вам нужно знать, как выглядит обычный ответ.

+0

Извините @ Иван, просто получил права на просмотр и затерялся в очередях. Думал, что я смотрю на вопросы, а не на ответы. Виноват. Удалил комментарий. Я тоже с радостью переверную вниз, но он заблокирован. Я могу изменить его, только если вы отредактируете свой ответ. Извините, что причинил вам неприятности, похоже, что вы все сделали правильно, и я просто испортил. –

+1

Хорошо, проблем нет. (отредактировал его) –

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