к какому эфемерному порту привязан java InetSocketAddress?

Чего я хотел бы достичь

привязать сервер к временному порту для целей модульного тестирования.

Моя проблема:

Использование версии 1.5.0_22 JDK Я пытаюсь привязать InetSocketAddress к эфемерному порту, используя порт 0 в соответствии с javadoc, но я не могу найти способ из адресного объекта узнать, к какому порту он привязан, поэтому я не могу настроить своих клиентов соответствующим образом:

InetSocketAddress address = new InetSocketAddress(0);
assertThat(address.isUnresolved(), is(false));
assertThat(address.getPort(), is(0));

Я могу неправильно понять предложение javadoc:

Допустимое значение порта находится в диапазоне от 0 до 65535. Нулевой номер порта позволит системе выбрать временный порт в операции привязки.

Но проверка порта даже после того, как мой сервер прослушивает сокет (я предполагаю, что тогда произошло связывание) не возвращает ничего, кроме 0 (в следующем примере используется http: //simpleweb.sourceforge. net / library):

    Container httpServer = new Container() {

        public void handle(Request req, Response resp) {
        }
    };
    SocketConnection connection = new SocketConnection(httpServer);
    InetSocketAddress address = new InetSocketAddress(0);
    connection.connect(address);

    assertThat(address.isUnresolved(), is(false));
    assertThat(address.getPort(), is(0));

Используя nmap, я даже не вижу привязанного порта, поэтому предполагаю, что мое понимание неверно. Есть помощь?

6
задан user691154 1 December 2011 в 16:02
поделиться