繁体   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