如何检测一个指定端口被哪个程序使用 比如要检测主机上的8282端口被哪个程序使用了,如何实现,java或C,有没有这方面的api? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在命令行下是这样的比如要查看8080端口被哪个程序占用了,windows命令行窗口下执行:运行--cmdC:\>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 如果端口不可用,捕获异常try{ServerSocket testPort = new ServerSocket(8282);}catch(Exception ex){ex.printStackTrace();} 在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 try{ServerSocket testPort = new ServerSocket(8282);}catch(Exception ex){ex.printStackTrace();} 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(); } }}这是简单版的,详细的楼主自己细化一下 怎么样才能对邮件进行安全验证 ********寻去java注释的源代码********* !=的判断问题:为何输入exit不能结束程序 我是新学的,遇到个问题,有人能帮我吗?感谢~ 发几篇swing中关于JTable中的运用-1 求教~~~我安装的JBuilderX Enterprise Trial 版之后~!Servlet和 jsp都不能配置???? 关于jdom的问题 为什么我的ImageIcon不好使? 只剩下6分了!!请问一个调用外部命令的问题 弄了几天了 java Session和Channel的关系 outer:和inner:的作用?程序流程?
比如要查看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
try
{
ServerSocket testPort = new ServerSocket(8282);
}
catch(Exception ex)
{
ex.printStackTrace();
}
{
ServerSocket testPort = new ServerSocket(8282);
}
catch(Exception ex)
{
ex.printStackTrace();
}
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();
}
}
}这是简单版的,详细的楼主自己细化一下