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


与实际相符


目录
相关文章
|
3月前
|
Java
java基础(11)函数重载以及函数递归求和
Java支持函数重载,即在同一个类中可以声明多个同名方法,只要它们的参数类型和个数不同。函数重载与修饰符、返回值无关,但与参数的类型、个数、顺序有关。此外,文中还展示了如何使用递归方法`sum`来计算两个数之间的和,递归的终止条件是当第一个参数大于第二个参数时。
34 1
java基础(11)函数重载以及函数递归求和
|
6月前
|
Java
java springboot 8080端口号冲突时 修改当前项目端口号
java springboot 8080端口号冲突时 修改当前项目端口号
87 0
|
5月前
|
算法 Java
java使用递归及迭代方式实现前序遍历 中序遍历 后序遍历 以及实现层序遍历
java使用递归及迭代方式实现前序遍历 中序遍历 后序遍历 以及实现层序遍历
89 7
|
4月前
|
SQL 网络协议 Java
JAVA SQLServerException: 通过端口 1433 连接到主机 127.0.0.1 的 TCP/IP 连接失败
JAVA SQLServerException: 通过端口 1433 连接到主机 127.0.0.1 的 TCP/IP 连接失败
68 0
|
6月前
|
Java
蓝桥杯Java组暴力递归搜图
蓝桥杯Java组暴力递归搜图
34 4
|
6月前
|
Java Android开发
Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。
【6月更文挑战第23天】 Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。客户端连接服务器,发送"Hello, Server!"后关闭。注意Android中需避免主线程进行网络操作。
108 4
|
6月前
|
Java
java实现斐波那契数列(递归、迭代、流)
java实现斐波那契数列(递归、迭代、流)
|
6月前
|
算法 前端开发 Java
探讨Java中递归构建树形结构的算法
探讨Java中递归构建树形结构的算法
85 1
|
5月前
|
Java Redis 数据安全/隐私保护
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
|
6月前
|
Java
Java递归:深入理解与应用
Java递归:深入理解与应用
75 1