java:判断某个端口是否被占用,以及递归找到可使用端口

简介: java:判断某个端口是否被占用,以及递归找到可使用端口

最近在搞页面一键操作自动化运维的事情,简单来说,就是把需要手工改配置,再通过shell启动节点的事情,全部通过代码和脚本串联起来。

本来有一步操作是手工配置端口,但自动化之后需要程序找到未被占用端口,并写入配置文件


思路:配置文件处有默认端口,一般来说用户使用时会参考默认端口依次递增,所以我这里找可用端口的思路也是会根据默认端口依次递增去递归找到未被占用端口


直接上代码


package test;
import java.io.IOException;
import java.net.*;
import java.util.Enumeration;
public class GetLocalHost {
    public static void main(String[] args) throws Exception {
        int inputPort = 8400;
        System.out.println("输入端口:" + inputPort + ", 递增递归找到可用端口为:" + getUsablePort(inputPort));
    }
    /**
     * 根据输入端口号,递增递归查询可使用端口
     * @param port  端口号
     * @return  如果被占用,递归;否则返回可使用port
     */
    public static int getUsablePort(int port) throws IOException {
        boolean flag = false;
        Socket socket = null;
        InetAddress theAddress = InetAddress.getByName("127.0.0.1");
        try{
            socket = new Socket(theAddress, port);
            flag = true;
        } catch (IOException e) {
            //如果测试端口号没有被占用,那么会抛出异常,通过下文flag来返回可用端口
        } finally {
            if(socket!=null) {
            //new了socket最好释放
                socket.close();
            }
        }
        if (flag) {
        //端口被占用,port + 1递归
            port = port + 1;
            return getUsablePort(port);
        } else {
        //可用端口
            return port;
        }
    }
}

运行结果

image.png


与实际相符


目录
相关文章
|
4月前
|
Java
java 递归删除多层嵌套的文件
java 递归删除多层嵌套的文件
|
5月前
|
机器学习/深度学习 Java 编译器
Java方法与递归
Java方法与递归
41 0
|
3月前
|
Java
【汉诺塔】经典递归问题(Java实现)图文并茂讲解
【汉诺塔】经典递归问题(Java实现)图文并茂讲解
|
3天前
|
Java
java中递归实例
java中递归实例
15 0
|
3天前
|
Java C语言
详解java方法与递归
详解java方法与递归
10 3
|
11天前
|
网络协议 Java
Java中如何使用Socket类检测端口是否存在
Java中如何使用Socket类检测端口是否存在
25 4
|
13天前
|
自然语言处理 Java 编译器
【Java探索之旅】方法重载 递归
【Java探索之旅】方法重载 递归
10 0
|
17天前
|
SQL Java 关系型数据库
java 递归返回树形组织结构(附带树形菜单的搜索)
java 递归返回树形组织结构(附带树形菜单的搜索)
14 0
|
2月前
|
算法 Java
Java必刷入门递归题×5(内附详细递归解析图)
Java必刷入门递归题×5(内附详细递归解析图)
26 1
C4.
|
2月前
|
机器学习/深度学习 存储 搜索推荐
Java的递归
Java的递归
C4.
8 0