Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在运行时检查端口使用情况?_Java_Sockets_Port - Fatal编程技术网

Java 在运行时检查端口使用情况?

Java 在运行时检查端口使用情况?,java,sockets,port,Java,Sockets,Port,在我的应用程序中,在运行时,我希望能够识别是否正在使用某个特定的端口(这非常容易做到) 但我也希望得到尽可能多的关于谁在使用这个端口的信息。进程id、名称等信息。我该怎么做?Java没有提供您需要的信息。您将不得不使用特定于操作系统的API 我不知道*nix系统,但在Windows上,您可以通过使用/或枚举TCP套接字来获取TCP套接字的进程ID,直到找到您感兴趣的IP/端口。对于UDP,有一个函数(还有GetUdpTable()和GetUdp6Table()函数,但它们不提供所有者进程ID)

在我的应用程序中,在运行时,我希望能够识别是否正在使用某个特定的端口(这非常容易做到)


但我也希望得到尽可能多的关于谁在使用这个端口的信息。进程id、名称等信息。我该怎么做?

Java没有提供您需要的信息。您将不得不使用特定于操作系统的API

我不知道*nix系统,但在Windows上,您可以通过使用/或枚举TCP套接字来获取TCP套接字的进程ID,直到找到您感兴趣的IP/端口。对于UDP,有一个函数(还有
GetUdpTable()
GetUdp6Table()
函数,但它们不提供所有者进程ID)

获得进程ID后,可以通过以下方式获取其文件名:

  • 使用//枚举正在运行的进程,直到找到匹配的进程ID

  • 使用直接打开给定进程ID的进程,然后使用或查询该进程的文件名


  • windows
    *nix
    平台?理想情况下,我可以同时支持两者,但*nix是最低要求
    public static boolean portAvailable(int port) {
        try (Socket ignored = new Socket("localhost", port)) {
            return false;
        } catch (IOException ignored) {
            return true;
        }
    }