Проверьте, свободен ли определенный порт в Solaris - PullRequest
0 голосов
/ 05 сентября 2018

У меня была странная проблема с машиной SPARC Solaris 11.3. Я использовал для проверки, свободен ли порт или нет, используя следующий метод в java (возвращает true, если порт свободен, иначе возвращает false).

public static boolean isPortFree(int port) {
    try {
        new ServerSocket(port).close();            
        return true;
    } catch (IOException e) {
        System.out.println("Exception "+e.getMessage());
        return false;            
    }        
}

Приведенный выше код прекрасно работает во всех ОС, кроме Solaris. На машине Solaris, когда я тестировал с портом 22, он работает как положено, но когда я тестировал с портом 12345, который используется другим процессом, он возвращает true, что является неправильным поведением. Должно появиться исключение, говорящее Адрес уже используется и возвращающее false. Пожалуйста, предложите мне хорошую идею, которая работает даже в Solaris

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Я выяснил проблему, это связано с проблемой IPV4 и IPV6 в машине Solaris. Процесс C открывает порт IPV4 и фрагмент кода Java ServerSocket(port).close(); проверяет порт IPV6. Так что причина в том, что в Java не возникает никаких исключений, даже если порт (IPV4) уже используется.

0 голосов
/ 05 сентября 2018

Я думаю, у вас есть активный брандмауэр, который блокирует доступ к порту. С другой стороны, проверьте ваше приложение, если оно запускает только локальные соединения или нет

...