首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java:判断某个端口是否被占用,以及递归找到可使用端口

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

作者头像
鲲志说
发布2025-04-07 21:16:33
发布2025-04-07 21:16:33
16300
代码可运行
举报
运行总次数:0
代码可运行

构思

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

代码实现

代码语言:javascript
代码运行次数:0
运行
复制
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;
        }
    }
}

运行结果

与实际相符,则正确


命令行判断某个端口是否被占用

  1. 命令行查询端口
代码语言:javascript
代码运行次数:0
运行
复制
lsof -i:[端口号]
  1. kill掉该端口
代码语言:javascript
代码运行次数:0
运行
复制
kill 3187244
  1. 再次查看端口就会发现已经被kill掉了
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 构思
  • 代码实现
  • 运行结果
  • 命令行判断某个端口是否被占用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档