use*_*154 6 java sockets jdk1.5
我想要实现的目标
将服务器绑定到临时端口以进行单元测试.
我的问题:
使用1.5.0_22 JDK我尝试使用端口0根据javadoc绑定临时端口上的InetSocketAddress,但是我找不到地址对象的方法来知道它绑定到哪个端口,所以我不能拥有我的客户端相应配置:
InetSocketAddress address = new InetSocketAddress(0);
assertThat(address.isUnresolved(), is(false));
assertThat(address.getPort(), is(0));
Run Code Online (Sandbox Code Playgroud)
我可能无法正确理解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));
Run Code Online (Sandbox Code Playgroud)
使用nmap我甚至看不到绑定端口,所以我假设我的理解是不正确的.有帮助吗?
Rem*_*eau 10
的InetSocketAddress最初包含端口0不被更新connect(),以表示被绑定到的实际端口.调用connection.getLocalPort()或((InetSocketAddress)connection.getLocalSocketAddress()).getPort()代替获取绑定端口.