content: package com.xxl.job.core.util;
  
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  import java.io.IOException;
  import java.net.ServerSocket;
  
  /**
   * net util
   *
   * @author xuxueli 2017-11-29 17:00:25
   */
  public class NetUtil {
      private static Logger logger = LoggerFactory.getLogger(NetUtil.class);
  
      /**
       * find avaliable port
       *
       * @param defaultPort
       * @return
       */
      public static int findAvailablePort(int defaultPort) {
          int portTmp = defaultPort;
          while (portTmp < 65535) {
              if (!isPortUsed(portTmp)) {
                  return portTmp;
              } else {
                  portTmp++;
              }
          }
          portTmp = defaultPort--;
          while (portTmp > 0) {
              if (!isPortUsed(portTmp)) {
                  return portTmp;
              } else {
                  portTmp--;
              }
          }
          throw new IllegalStateException("no available port.");
      }
  
      /**
       * check port used
       *
       * @param port
       * @return
       */
      public static boolean isPortUsed(int port) {
          boolean used = false;
          ServerSocket serverSocket = null;
          try {
              serverSocket = new ServerSocket(port);
              used = false;
          } catch (IOException e) {
              logger.debug(">>>>>>>>>>> xxl-job, port[{}] is in use.", port);
              used = true;
          } finally {
              if (serverSocket != null) {
                  try {
                      serverSocket.close();
                  } catch (IOException e) {
                      logger.info("");
                  }
              }
          }
          return used;
      }
  
  }
  