2014-04-24 66 views
0

我正在用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,最終是其他系統)是否允許我獲取該信息?

我可以使用命令行來找到這個信息,但這真的不是我想要的。

+0

我建議你只是告訴用戶運行「netstat的」自己。 – EJP

+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 
+0

但是這個使用內置的系統功能,不是嗎? –

+0

是的,現在你已經有了字符串緩衝區中的全部內容。您可以進行任何檢查,並根據您的支票向用戶提供適當的消息。對不起,延遲響應。 :( – Helios

+0

我希望Java有它自己的方式,但我想這將不得不做。 –

相關問題