比如要检测主机上的8282端口被哪个程序使用了,如何实现,java或C,有没有这方面的api?

解决方案 »

  1.   

    在命令行下是这样的
    比如要查看8080端口被哪个程序占用了,windows命令行窗口下执行:运行--cmd
    C:\>netstat -aon|findstr "8080" ,输出
    TCP 127.0.0.1:80 0.0.0.0:0 LISTENING 2448
    端口被进程号为2448的进程占用,继续执行下面命令:
    C:\>tasklist|findstr "2448" 
    thread.exe 2016 Console 0 16,064 K表示thread.exe程序占用了端口8080
      

  2.   

    如果端口不可用,捕获异常
    try
    {
    ServerSocket testPort = new ServerSocket(8282);
    }
    catch(Exception ex)
    {
    ex.printStackTrace();
    }
      

  3.   

    在windows命令行窗口下执行:>netstat -aon|findstr "8000"TCP     127.0.0.1:8000         0.0.0.0:0               LISTENING       4292看到了吗,端口被进程号(PID)为4292的进程占用,继续执行下面命令:>tasklist|findstr "4292"python.exe*32
      

  4.   

    try
    {
    ServerSocket testPort = new ServerSocket(8282);
    }
    catch(Exception ex)
    {
    ex.printStackTrace();
    }
      

  5.   


    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();
            }
        }
    }这是简单版的,详细的楼主自己细化一下