我想达到什么
将服务器绑定到临时端口以进行单元测试。
我的问题:
使用 1.5.0_22 JDK,我尝试根据 javadoc 使用端口 0 在临时端口上绑定 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 我什至看不到绑定端口,所以我假设我的理解不正确。有什么帮助吗?