[英]Java: Common way to validate and convert “host:port” to 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.