这个必须要jni吧.
顶多是JVM帮你实现一个.

解决方案 »

  1.   

    运行外部命令: netstat -ano
      

  2.   

    不好意思 Java 不是用来做这些工作的
      

  3.   

    java有很多jar包用来完成一些拓展功能 网上找了个帖子 看看是否符合?
    http://www.ooppoo.com/html/74/n-99274.html
      

  4.   

    没有合适的jar包lz可以尝试通过程序解析ls推荐的那个命令。
      

  5.   

    import java.io.IOException;
    import java.net.Socket;
    import java.net.UnknownHostException;
    /**
      * Port Scanner
      */
    public class MainClass1
    {
        /**
          *main entry
          */
        public static void main(String[] args)
        {
            String host="localhost";
            for(int i=1;i<65536;i++)
            {
                 try
                 {
                Socket s=new Socket(host,i);//if there is no server on that port, it will throw a IOException
                System.out.println("There is a server on port "+i+" of "+host);
                 }
                 catch(UnknownHostException e)
                 {
                     System.out.println(e);
                                 break;
                 }
                 catch(IOException e)
                 {
                    System.out.println("there is no server on port "+i);
                 }
            }
        }
    }利用Socket 连接可以得出你要的结果。
      

  6.   

    我知道,但这样扫端口是很慢的,再加上用Socket就更慢了,有没有高效一些的啊
      

  7.   

    不好意思,目前我只知道这个方法,我的系统是linux,扫描不到2秒就扫描完了,但是我也在windows下运行过,确实很慢,不知道您的系统是不是windows的?
      

  8.   

    netstat -ano,这里面的Local Address最后的数字应该就是端口号,你解析一下这个属性就知道哪个端口号被占用了。
      

  9.   


    public static void getHostInterfaceId(){
    String line = "";
    Process pro = null;
    BufferedReader buf = null;
    try{
    pro = Runtime.getRuntime().exec("netstat -ano");
    buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));
    int i = 0;
    while((line = buf.readLine()) != null){
    if(line.length() > 0 && i > 3){
    String[] strArray = line.split("\\s+");
    if(strArray.length>=3){
    String s = strArray[2];
    String[] sArray = s.split(":");
    System.out.println(sArray[1]);
    }
    }
    i++;
    }
    } catch(Exception e){
    e.printStackTrace();
    } finally{
    try {
    buf.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    pro.destroy();
    }
    }基本思路就是这个具体如何解析字符串的结合你的操作系统来实现,微调一下即可,输出结果是各个被占用端口。