关注:CodingTechWork
導入
プロジェクトの開発中に、TCP ポートをサービスに特別に割り当てて占有するプログラムがありますが、TCP ポートが他のサービスによって占有される場合があり、この場合、ポートが競合します。この記事では、ポートの占有を判断し、使用可能なポートを返すツール クラスを提供します。
コード
ツール
@Slf4j
public class SocketPortUtil {
public static int getNextAvailablePort(int fromPort) throws IOException {
ServerSocket serverSocket = null;
try {
//构建ServerSocket
serverSocket = new ServerSocket(fromPort);
return serverSocket.getLocalPort();
} catch (IOException e) {
// port被占用
log.info("port={} is not avaiable.", fromPort);
} finally {
if (serverSocket != null) {
serverSocket.close();
}
}
//递归查找下一个可用port
return getNextAvailablePort(fromPort + 1);
}
public static void main(String[] args) throws IOException {
int port = SocketPortUtil.getNextAvailablePort(64661);
System.out.println("next available port is: " + port);
}
}
テスト
netstat
現在のサーバーが占有している TCP ポートを見つけて、ポート 64661 が占有されていることがわかった場合は、上記の main 関数を実行します。テスト結果は次のとおりです。
11:19:06.721 [main] INFO com.test.selfcoding.utils.SocketPortUtil - port=64661 is not avaiable.
next available port is: 64662
Process finished with exit code 0