Я использую функцию JNI_CreateJavaVM
создать на окнах внутрипроцессную JVM в исполняемый файл. Я также передаю некоторые параметры, чтобы включить отладку, в частности:
-Xrunjdwp:transport=dt_socket,server=y,address=666,suspend=n
наряду с некоторыми другими вариантами. Это отлично работает.
Однако проблема в том, что я запускаю две версии исполняемого файла: JNI_CreateJavaVM
сбои. Очевидное решение — проверить, занят ли порт 666 и, если это так, использовать другой номер порта. За исключением того, что я не знаю, как это сделать!
Итак, мой вопрос: как я могу проверить, прослушивается ли уже порт?
Не проверяйте заранее используемый порт. Просто позвольте вашему приложению делать то, что оно хочет, и поймайте исключение там. Ситуация может измениться между временем тестирования и фактическим использованием порта.
Кроме того, если вы пытаетесь написать серверное приложение, операционная система может автоматически выбрать для вас свободный порт. Из JavaDoc для http://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html
Создает сокет сервера, связанный с указанным портом. Номер порта 0 означает, что номер порта автоматически выделяется, как правило, из временного диапазона портов. Этот номер порта можно затем получить, вызвав getLocalPort.