被占用的端口如何通过Java代码查出是那个ip占用的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了被占用的端口如何通过Java代码查出是那个ip占用的相关的知识,希望对你有一定的参考价值。

当确定一个端口被占用的时候,怎么通过Java分析出是那个ip在使用这个端口,不能在Java中使用操作系统自带的查询方法,只能使用Java的方法。

public class TestPort

    public static void main(String[] args)
    
        System.out.println(getPID("3306"));//得到进程ID,3306是端口名称
        System.out.println(getProgramName(getPID("3306")));//根据进程ID得到映像名称
        killTask(getProgramName(getPID("3306")));//根据映像名称关闭进程
    
    
    
    // 得到进程ID
    public static String getPID(String port)
        InputStream is = null;
        BufferedReader br = null;
        String pid = null;
        try
        
            String[] args = new String[]"cmd.exe","/c","netstat -aon|findstr",port;
            is = Runtime.getRuntime().exec(args).getInputStream();
            br = new BufferedReader(new InputStreamReader(is));
            String temp = br.readLine();
            if(temp != null)
                String[] strs = temp.split("\\\\s");
                pid=strs[strs.length-1];
            
        
        catch (IOException e)
        
            e.printStackTrace();
        finally
            try
            
                br.close();
            
            catch (IOException e)
            
                e.printStackTrace();
            
        
        return pid;
    
    
    //根据进程ID得到映像名称
    public static String getProgramName(String pid)
        InputStream is = null;
        BufferedReader br = null;
        String programName = null;
        try
        
            String[] args = new String[]"cmd.exe","/c","tasklist|findstr",pid;
            is = Runtime.getRuntime().exec(args).getInputStream();
            br = new BufferedReader(new InputStreamReader(is));
            String temp = br.readLine();
            if(temp != null)
                String[] strs = temp.split("\\\\s");
                programName=strs[0];
            
        
        catch (IOException e)
        
            e.printStackTrace();
        finally
            try
            
                br.close();
            
            catch (IOException e)
            
                e.printStackTrace();
            
        
        return programName;
    
    
    //根据映像名称关闭进程
    public static void killTask(String programName)
        String[] args = new String[]"Taskkill","/f","/IM",programName;
        try
        
            Runtime.getRuntime().exec(args);
        
        catch (IOException e)
        
            e.printStackTrace();
        
    

//题主自己看看具体怎么get它的ip地址,好久没有写,不知道了

参考技术A java能执行cmd命令啊,具体怎么写我记不起来了,你查查追问

已经说过了,不能使用系统自带的命令,不使用netstat,用纯Java方法获取。

追答

貌似不行,就算你找网上的jar包,实际里面也是封装的cmd这种,就像楼上的

常见命令:端口被占用如何做

一、端口被占用如何做

1、首先查出占用端口的进程ID

netstat -ano | findstr 8080

2、杀死该进程

taskkill /f /PID
// 上一步查到的进程ID
taskkill /pid 20892 /f
// 成功: 已终止 PID 为 20892 的进程。

 

以上是关于被占用的端口如何通过Java代码查出是那个ip占用的的主要内容,如果未能解决你的问题,请参考以下文章

常见命令:端口被占用如何做

java中端口号被占用怎么解决?感激不尽

解决端口被占用问题

如何手动释放一个java线程占用的资源

java中如何判断端口被占用

查看端口是哪个java