2010-06-28 2 views
4

У меня есть приложение, которое принимает SSL-соединения на определенном порту. Когда я останавливаю приложение из Консоли администрирования Websphere, а затем запускаю его снова, я получаю исключение, которое жалуется, что порт все еще используется. Мне нужно полностью отключить и снова перезапустить Websphere, чтобы приложение снова работало.Прекратить прослушивание порта

Каков правильный способ прекратить прослушивание порта в Java?

ответ

2

Я не уверен, как это делается на Java, но закрытие сокета (.close() на ServerSocket?) Закроет порт. Тем не менее, многие операционные системы не позволят вам повторно использовать один и тот же порт примерно на 30 секунд после того, как вы его закрыли, чтобы предотвратить чтение старых сообщений новым соединением.

1

Просто закройте ручку разъема, что-то вроде yourSocket.close(). This example может помочь.

+0

Спасибо, но мое приложение принимает входящие соединения в цикле. Как узнать, закрывает ли приложение Websphere приложение? – AbdullahC

+0

Если вы открываете порт, как WebSphere придет и закроет это для вас? Сервер приложений закрывает приложение, а ресурсы, которые не управляются контейнерами WAS, не будут закрыты, так как сервер приложений не знает о них. Должна быть ответственность приложения закрыть порты. Также, как упоминал Боб Турбо, порты могут быть недоступны в течение короткого периода после их закрытия (это выполняется ОС). – Manglu

+1

@ Hippo: В идеале приложение, открывающее порт, отвечает за изящное закрытие этого порта. В вашем случае вам нужно отслеживать (в массиве/списке и т. Д.) Всех портов, которые открываются в вашем цикле. –

0
ServerSocket ss = new ServerSocket(); 
ss.setReuseAddress(true); 
ss.bind(port); 
Смежные вопросы