检查哪个进程正在使用给定端口

时间:2014-04-24 12:36:25

标签: java sockets networking

我正在用Java创建一个简单的客户端 - 服务器应用程序。这是我初始化侦听套接字的方式:

private void initSock() {
    try {
        sock = new ServerSocket(port);
    } catch (IOException e) {
        System.err.println("Could not listen on port: "+port+". Isn't the port already in use?");
        System.exit(1);
    }
}

当使用端口时,该方法会抛出可能有用的错误消息 - 但是:是否可以扩展信息,如下所示:

  

无法侦听端口xx,流程blahblah正在使用pid xxx

Java(和Windows,以及最终其他系统)是否允许我获取该信息?

我可以使用命令行找到这个信息,但这不是我现在想要的。

1 个答案:

答案 0 :(得分:0)

我无法满足您的要求,但在代码之下可以为您提供更多信息:

public class NetStat 
{
    public static void main(String [] args) throws IOException
    {
        BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter port number :");
        String port =br.readLine();
        StringBuffer output = new StringBuffer();
        Process p = Runtime.getRuntime().exec("netstat -an");
        BufferedReader reader = 
                 new BufferedReader(new InputStreamReader(p.getInputStream()));

        String line = "";           
        while ((line = reader.readLine())!= null) {
            if(line.contains(port))
            {
                output.append(line + "\n");
            }
        }

        System.out.println(output.toString());

    }
}


Input: 50773
Output: TCP    1xx.xxx.xxx.xxx:50773   xxx.xxx.xxx.xxx:8080    ESTABLISHED