2011-12-01 24 views
5

我想實現的目標哪個臨時端口有java InetSocketAddress綁定?

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

我的問題:

使用JDK 1.5.0_22我嘗試使用端口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的我甚至不看綁定端口,因此我假設我的理解是不正確。任何幫助?

+1

NMAP從「外部」的作品,並受防火牆和諸如此類的東西。要檢查同一臺機器上的端口綁定,請使用「netstat」,而不是直接查詢TCP堆棧,而不是戳和刺激。 –

回答

10

最初包含端口0的InetSocketAddress未被connect()更新爲表示綁定到的實際端口。請撥打connection.getLocalPort()((InetSocketAddress)connection.getLocalSocketAddress()).getPort()代替以獲取綁定的端口。