zoukankan      html  css  js  c++  java
  • java端口扫描(原创)

      项目需要扫描占用的端口来判断服务是否启动,通过查资料发现大多数方法都是ServerSocket socket = new ServerSocket(port);代码如下:

    package com.frank.util;  
      
    import java.io.IOException;  
    import java.net.InetAddress;  
    import java.net.Socket;  
    import java.net.UnknownHostException;  
      
    public class NetUtil {  
          
        /*** 
         *  true:already in using  false:not using  
         * @param port 
         */  
        public static boolean isLoclePortUsing(int port){  
            boolean flag = true;  
            try {  
                flag = isPortUsing("127.0.0.1", port);  
            } catch (Exception e) {  
            }  
            return flag;  
        }  
        /*** 
         *  true:already in using  false:not using  
         * @param host 
         * @param port 
         * @throws UnknownHostException  
         */  
        public static boolean isPortUsing(String host,int port) throws UnknownHostException{  
            boolean flag = false;  
            InetAddress theAddress = InetAddress.getByName(host);  
            try {  
                Socket socket = new Socket(theAddress,port);  
                flag = true;  
            } catch (IOException e) {  
                  
            }  
            return flag;  
        }  
    } 
    

      经过测试发现如果端口没有占用,此方法的时间消耗比较大,大概在1s左右,如果是循环扫描端口,无疑是无法接受的。

    可以用java.net.ServerSocket包的ServerSocket代替Socket去检测端口,方法如下:

      public static boolean isPortUsing(String host,int port) throws UnknownHostException{  
          boolean flag = true;
    //      InetAddress theAddress = InetAddress.getByName(host);  
          try {  
    //          Socket socket = new Socket(theAddress,port);  
        	  ServerSocket socket = new ServerSocket(port);  
              flag = false;
              socket.close();
          } catch (IOException e) {
                
          }  
          return flag;  
      }  
    

      对Socket等知识研究较少,如有问题,请大家及时提出,尽快改正,谢谢!

  • 相关阅读:
    带横线圆圈标题
    锚点点击导航 跳转到相应位置,样式随之变化
    导航随滚动改变样式
    for循环中嵌套函数,执行顺序和结果该如何理解?
    mui 记录
    获取页面所有a标签href
    cookie记录横向滚动条位置
    Istio全景监控与拓扑
    Istio 流量治理功能原理与实战
    Cloud Native Weekly | KubeCon首登中国,华为云亮相KubeCon 2018,微软云服务又罢工
  • 原文地址:https://www.cnblogs.com/superJF/p/5157997.html
Copyright © 2011-2022 走看看