2015-03-14 3 views
1

У меня есть часть в коде, который проверяет наличие порта (открывает соединение и сразу же закрыть его):В JAVA, как подключение и ждать порта, чтобы закончить TIME_WAIT

try{ 
    new ServerSocket(currentConnector.getPort()).close(); 
} 

porblem здесь является то, что порт входит состояние TIME_WAIT, которое отличается от системы к системе. Я хочу убедиться, что после close() порт доступен.

Один из способов, о котором я могу думать, заключается в добавлении 60-90 секунд сна. Но это не кажется очень изящным.

Можно ли проверить с помощью Java (без bash/batch), что порт был освобожден от TIME_WAIT?

Спасибо!

ответ

0
  1. Порт только входит в ВРЕМЯ, если кто-то подключился к нему.

  2. Вы можете преодолеть BindException, что результаты по:

    ServerSocket ss = new ServerSocket(); 
    ss.setReuseAddress(true); 
    ss.bind(new InetSocketAddress(port)); 
    
  3. Однако я подвергаю сомнению цель. Если вы хотите слушать в порту, послушайте его и поймайте исключение. Если вы хотите узнать, можете ли вы подключиться к нему, подключитесь к нему и обработайте исключение по мере его возникновения. Техника предсказания будущего - это просто гадание в конце. Технология Unsound. Правильный способ определить, доступен ли какой-либо ресурс для использования, - это просто попытаться использовать его обычным способом. Все остальное несет ответственность за ложные негативы, ложные срабатывания и проблемы с временными окнами.

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