Java调win控制台获取占用端口的程序名
经常在调用bind方法的时候程序被占用了。如何查找是哪个程序占用的呢?代码如下:
private void bindCheck(int port){
Runtime run = Runtime.getRuntime();
try {
Process process = run.exec("netstat -ano");
InputStream input = process.getInputStream();
InputStream inputE = process.getErrorStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input,"GB2312"));
String szline;
String pid = null;
while ((szline = reader.readLine()) != null) {
if(szline.indexOf(":"+port)>0){
pid = szline.split("\\s+")[szline.split("\\s+").length - 1];
}
}
reader.close();
reader = new BufferedReader(new InputStreamReader(inputE,"GB2312"));
while ((szline = reader.readLine()) != null) {
System.out.println(szline);
}
reader.close();
process.waitFor();
process.destroy();
if(pid != null){
process = run.exec("tasklist");
input = process.getInputStream();
inputE = process.getErrorStream();
reader = new BufferedReader(new InputStreamReader(input,"GB2312"));
while ((szline = reader.readLine()) != null) {
if(szline.indexOf(pid)>0){
System.out.println("[ERROR] Bind error!\nThis pid occupies the port "+port+"\n"+Arrays.toString(szline.split("\\s+")));
}
}
reader.close();
reader = new BufferedReader(new InputStreamReader(inputE,"GB2312"));
while ((szline = reader.readLine()) != null) {
System.out.println(szline);
}
reader.close();
process.waitFor();
process.destroy();
}else{
System.out.println("No process occupies port "+ port);
}
} catch (Exception e) {
e.printStackTrace();
}
}