2009-11-19 1 views
0

Есть ли простой способ убедиться, что локальный порт еще не открыт. Некоторые серверы сокетов TCP (например, Grizzly) по-видимому не выполняют эту проверку по умолчанию. Когда эта проверка отсутствует, сервер начинает запускать и отвечать, но клиентский код просто подключается к старому серверу, который не был выключен. Это может быть очень плохо!Проверка локального TCP-порта не открыта в Java

Есть ли простая строка кода Java, которая может проверить, что порт еще не используется другим процессом?

ответ

3

Я вижу два очевидных способа сделать это:

  1. попытки подключения к этому порту на локальном хосте, если вы получаете приняты, порт используется
  2. попробовать открыть ServerSocket в режиме прослушивания в этом порту. Если вы получаете исключение «уже связанное», тогда используется порт

Надеюсь, что это поможет.

+0

Между двумя из них, возможно, лучше попробовать подключиться - открытие порта, скорее всего, откроет брандмауэр пользователя с предупреждением о том, что «приложение XYZ пытается прослушивать порт 1234 ...» –

+0

Решение ServerSocket было довольно скользкий. Всплывающее окно брандмауэра прекрасное, так как программа все равно предоставит услугу на этом порту. Спасибо за вашу помощь. – User1

+0

Просто заметьте: если вы попытаетесь подключиться к порту и выйти из строя, возможно, это связано с тем, что вы подключены к нему через брандмауэр. Просто потому, что вы не можете подключиться, это не значит, что он не используется. –

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