Javaで空いているポート番号を取ってきたい
Javaで空いてるポート番号取ってきたかったんで,以下のように書いたらポート番号取れて便利でした.
int port; try (Socket socket = new Socket()) { socket.bind(null); port = socket.getLocalPort(); }
ドキュメントによると,Socket#bind()
の引数にnullを渡すと「アドレスがnullの場合は、システムにより一時的なポートと有効なローカル・アドレスが選択されてソケットがバインドされます」とのことなので,それを使ってbindしてポート番号を取得してからそのSocketをcloseすればそのポートが空くので空きポートが取れる,という寸法です.
try-with-resources使うとcloseのし忘れとかが無くなって便利ですね,便利!
[追記]
@moznion https://t.co/CdFWdTNBOY https://t.co/v68a59G64n new ServerSocket(0) でもできます
— Toshiyuki Takahashi (@tototoshi) 2014, 11月 29
とのことです!