Как я могу проверить, жив ли IP в Java? - PullRequest
6 голосов
/ 28 ноября 2011

В моей сети 5 устройств с разными IP-адресами. Я хочу подключиться к этим устройствам и получать данные от них через сокет TCP / IP, когда они доступны в моей сети. Как я могу проверить, доступны ли они в Java?

public void setUpConnection() {
    try {
        Socket client = new Socket(hostIp, hostPort);
        socketReader = client.getInputStream();
        socketWriter = new PrintWriter(client.getOutputStream());
    } catch (UnknownHostException e) {
        System.out.println("Error setting up socket connection: unknown host at " +   hostIp);
        System.out.println("host: " + hostIp + "port: " + hostPort);
    } catch (IOException e) {
        System.out.println("Error setting up socket connection: " + e);
        System.out.println("host: " + hostIp + "port:" + hostPort);
    }
}

Ответы [ 4 ]

17 голосов
/ 28 ноября 2011
InetAddress.getByName(host).isReachable(timeOut);

Дополнительная ссылка здесь

1 голос
/ 28 ноября 2011

Для чистой Java есть два основных метода:

  1. Активен: как ваш пример, но проходит через все порты и все связанные IP на хосте

  2. Пассивный: запуск небольшого сервера на заранее заданном (их) порте (ах), а другой зарегистрирует себя, когда они станут доступны.

isReachable может завершиться ошибкой по многим причинам, указанным в документации.

1 голос
/ 28 ноября 2011

, если вы просто хотите проверить, работает ли хост, вы можете использовать isReachable

0 голосов
/ 28 ноября 2011

TCP / IP - режим рукопожатия.Чтобы установить соединение с любым из этих 5 устройств.Ваш клиент и клиент получателя должны быть живы.Сначала, если возможно, затем используйте Socket NIO .Можете ли вы написать клиентскую логику так, чтобы каждый раз, когда какой-либо клиент подключался к сети, сначала сделал запись его ip и порта в базе данных и попытался получить другие доступные ip и порты из базы данных и попытаться установить соединение с ними.всякий раз, когда какое-либо клиентское устройство стало недоступным, удалите эту запись из базы данных.Пример: когда первое устройство подключено к сети, будет создан только один сокет, поскольку при подключении второго устройства в базе данных будет только одна запись, есть две записи: одна - ip и порт этого устройства, а вторая запись принадлежитна устройство, которое было первым.

Спасибо Сунил Кумар Sahoo

...