查看Windows端口对应的Java

在开发和部署Java应用程序时,经常需要查看操作系统的端口是否已经被Java进程占用。本篇文章将介绍如何在Windows操作系统下查看端口对应的Java进程,并提供相关的代码示例。

1. 常用的端口查看方法

在Windows操作系统中,有多种方法可以查看端口对应的进程,下面介绍几种常用的方法。

1.1 使用命令行工具

打开命令提示符或者Powershell,使用netstat命令可以查看当前系统中的端口占用情况。例如,要查看TCP占用的端口,可以执行以下命令:

netstat -ano | findstr :<port>

其中<port>为要查找的端口号。执行命令后,会显示该端口占用的进程的PID。

1.2 使用任务管理器

在Windows任务管理器中,可以查看系统中所有正在运行的进程。通过在任务管理器中选择“详细信息”选项卡,并按照“PID”列排序,可以找到对应端口的Java进程。

1.3 使用第三方工具

除了系统自带的工具外,还有一些第三方工具可以方便地查看端口对应的进程,例如TCPView、Process Explorer等。

2. 通过Java代码查看端口对应的进程

除了使用系统工具外,我们还可以通过Java代码来查看端口对应的进程。下面是一个示例代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.stream.Collectors;

public class PortUtils {

    public static void main(String[] args) {
        int port = 8080; // 要查看的端口号
        String processName = getProcessNameByPort(port);
        if (processName != null) {
            System.out.println("端口 " + port + " 对应的进程为: " + processName);
        } else {
            System.out.println("端口 " + port + " 未被占用");
        }
    }

    public static String getProcessNameByPort(int port) {
        try {
            Process process = Runtime.getRuntime().exec("netstat -ano | findstr :" + port);
            String result = new BufferedReader(new InputStreamReader(process.getInputStream()))
                    .lines().collect(Collectors.joining("\n"));
            if (result.contains("LISTENING")) {
                String[] lines = result.split("\n");
                for (String line : lines) {
                    if (line.contains("LISTENING")) {
                        String[] parts = line.split("\\s+");
                        String pid = parts[parts.length - 1];
                        return getProcessNameByPid(pid);
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String getProcessNameByPid(String pid) {
        try {
            Process process = Runtime.getRuntime().exec("tasklist /fi \"pid eq " + pid + "\"");
            String result = new BufferedReader(new InputStreamReader(process.getInputStream()))
                    .lines().collect(Collectors.joining("\n"));
            if (result.contains(pid)) {
                String[] lines = result.split("\n");
                for (String line : lines) {
                    if (line.contains(pid)) {
                        String[] parts = line.split("\\s+");
                        return parts[0];
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

上述代码中,我们通过执行系统命令netstat -ano | findstr :<port>来查找占用指定端口的进程的PID,然后再通过执行系统命令tasklist /fi "pid eq <pid>"来获取该进程的名称。最后,我们可以通过调用getProcessNameByPort方法来获取指定端口对应的进程名称。

运行上述代码,即可得到端口对应的进程名称。

总结

本文介绍了在Windows操作系统下查看端口对应的Java进程的常用方法,包括使用命令行工具、任务管理器和第三方工具。并提供了通过Java代码查看端口对应的进程的示例代码。通过这些方法,我们可以方便地查看端口是否已被占用,并找到占用该端口的Java进程。

状态图如下:

stateDiagram
    [*] --> 查看端口对应的