Я создал простой raw-проект и запустил два ServerSocket
на одном порту.В этом случае я получил java.net.BindException
с уведомлением, что «... Адрес уже используется: JVM_Bind ...».Но таким образом я могу проверить доступность порта, только если моя JVM захватила его.В случае, если другая программа слушает порт, я ничего об этом не знаю.
Я думаю, что вы неправильно интерпретируете свой результат.У меня есть все основания полагать, что если запрашиваемый вами порт уже связан с любым процессом, то ваша попытка связать его не удастся с BindException
.Это заботится о
Заблокирован ли порт, который я хочу использовать
.Что касается
- Список открытых на данный момент свободных / занятых портов на ПК
, существуют системные утилиты, которые могут получить эту информацию, но это бесполезно для вас.Какой бы конец ни инициировал соединение (т. Е. Клиент), необходимо заранее знать, к какому порту пытаться подключиться.Он не может получить это от сервера, потому что это представляет собой проблему курицы и яйца.
Обычный подход состоит в том, что сервер прослушивает определенный порт, выбранный его разработчиком или его администратором, и этот номер порта предоставляетсяклиенты вне диапазона - часто просто потому, что это стандартный, хорошо известный номер порта.Вот как работает большинство основных сетевых протоколов;например, HTTP-серверы по умолчанию работают на порту 80.Если требуемый порт оказывается недоступным, когда сервер пытается подключиться к нему, это указывает на неверную конфигурацию компьютера, и сервер просто не запускается.
Клиент, с другой стороны, не нуждаетсявыбрать номер порта вообще.Система выберет один для него автоматически при попытке подключения к серверу.