Java查询运行的Java端口

简介

在Java开发过程中,有时候需要查询当前运行的Java端口,常用于排查问题、检测是否已经启动了相关服务等。本文将向你介绍如何在Java中查询正在运行的Java端口。

流程

下面是查询Java端口的整个流程:

步骤 描述
1 获取正在运行的Java进程的PID
2 根据PID查询Java进程的端口
3 输出查询结果

接下来,我们将逐步完成上述每一步的操作,并提供相应的代码示例。

获取正在运行的Java进程的PID

首先,我们需要获取正在运行的Java进程的PID。可以通过Java Management Extensions(JMX)来实现这一功能。

以下是获取Java进程PID的代码示例:

import java.lang.management.ManagementFactory;

public class GetJavaProcessPID {
    public static void main(String[] args) {
        String processName = ManagementFactory.getRuntimeMXBean().getName();
        long pid = Long.parseLong(processName.split("@")[0]);
        System.out.println("Java进程PID: " + pid);
    }
}

代码解释:

  • ManagementFactory.getRuntimeMXBean().getName() 用于获取当前Java进程的名称,格式为 <pid>@<hostname>
  • processName.split("@")[0] 用于从进程名称中提取PID。
  • System.out.println("Java进程PID: " + pid) 用于输出获取到的PID。

根据PID查询Java进程的端口

获取到Java进程的PID后,我们可以通过执行系统命令来查询该进程所占用的端口。

以下是根据PID查询Java进程端口的代码示例:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class GetJavaProcessPort {
    public static void main(String[] args) {
        long pid = getJavaProcessPID();
        System.out.println("Java进程PID: " + pid);

        String command = "netstat -ano | findstr " + pid;
        try {
            Process process = Runtime.getRuntime().exec(command);
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static long getJavaProcessPID() {
        String processName = ManagementFactory.getRuntimeMXBean().getName();
        return Long.parseLong(processName.split("@")[0]);
    }
}

代码解释:

  • String command = "netstat -ano | findstr " + pid 构建查询命令,netstat -ano用于获取所有网络连接和监听端口,findstr用于筛选指定PID相关的结果。
  • Process process = Runtime.getRuntime().exec(command) 执行系统命令。
  • BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())) 创建缓冲读取器来读取命令执行结果。
  • System.out.println(line) 输出查询结果。

输出查询结果

最后,我们将查询到的结果输出。

以下是完整的代码示例:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.ManagementFactory;

public class JavaProcessPortQuery {
    public static void main(String[] args) {
        long pid = getJavaProcessPID();
        System.out.println("Java进程PID: " + pid);

        String command = "netstat -ano | findstr " + pid;
        try {
            Process process = Runtime.getRuntime().exec(command);
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static long getJavaProcessPID() {
        String processName = ManagementFactory.getRuntimeMXBean().getName();
        return Long.parseLong(processName.split("@")[0]);
    }
}

以上代码将输出查询结果,其中可能包含了该Java进程所占用的端口信息。

流程图

下图展示了查询Java端口的流程:

gantt
    title 查询Java端口流程

    section 获取Java进程PID
    根据PID查询Java进程端口
    输出查询结果

以上就是查询运行的Java端口的完整流程和代码示例。希望对你有所帮助!