我希望实现的目标
为了进行单元测试,将服务器绑定到临时端口。
我的问题:
使用1.5.0_22 JDK,我尝试使用端口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,我甚至看不到一个绑定的端口,所以我想我的理解是错误的。有人可以帮忙吗?