簡體   English   中英

哪個臨時端口有java InetSocketAddress綁定到?

[英]which ephemeral port has java InetSocketAddress binded to?

我想要實現的目標

將服務器綁定到臨時端口以進行單元測試。

我的問題:

使用1.5.0_22 JDK我嘗試使用端口0根據javadoc綁定臨時端口上的InetSocketAddress,但是我找不到地址對象的方法來知道它綁定到哪個端口,所以我不能擁有我的客戶端相應配置:

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

我可能無法正確理解javadoc語句:

有效端口值介於0和65535之間。端口號為零將使系統在綁定操作中獲取臨時端口。

但是,即使讓我的服務器監聽套接字后檢查端口(我假設綁定已經發生)也不會返回除0以外的任何內容(以下使用http://simpleweb.sourceforge.net/庫):

    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我甚至看不到綁定端口,所以我假設我的理解是不正確的。 有幫助嗎?

最初包含端口0的InetSocketAddress不會被connect()更新以表示綁定到的實際端口。 調用connection.getLocalPort()((InetSocketAddress)connection.getLocalSocketAddress()).getPort()來獲取綁定端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM