2011-12-01 18 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()代替以获取绑定的端口。