|
|
|
@ -2,10 +2,8 @@ package com.xxl.job.core.util; |
|
|
|
|
|
|
|
|
|
import org.slf4j.Logger; |
|
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
|
import org.springframework.util.StringUtils; |
|
|
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
|
import java.net.InetSocketAddress; |
|
|
|
|
import java.net.ServerSocket; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -17,24 +15,23 @@ public class NetUtil { |
|
|
|
|
private static Logger logger = LoggerFactory.getLogger(NetUtil.class); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* find avaliable port by ip |
|
|
|
|
* find avaliable port |
|
|
|
|
* |
|
|
|
|
* @param defaultPort |
|
|
|
|
* @param ip |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public static int findAvailablePort(int defaultPort,String ip) { |
|
|
|
|
public static int findAvailablePort(int defaultPort) { |
|
|
|
|
int portTmp = defaultPort; |
|
|
|
|
while (portTmp < 65535) { |
|
|
|
|
if (!isPortUsed(portTmp,ip)) { |
|
|
|
|
if (!isPortUsed(portTmp)) { |
|
|
|
|
return portTmp; |
|
|
|
|
} else { |
|
|
|
|
portTmp++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
portTmp = --defaultPort; |
|
|
|
|
portTmp = defaultPort--; |
|
|
|
|
while (portTmp > 0) { |
|
|
|
|
if (!isPortUsed(portTmp,ip)) { |
|
|
|
|
if (!isPortUsed(portTmp)) { |
|
|
|
|
return portTmp; |
|
|
|
|
} else { |
|
|
|
|
portTmp--; |
|
|
|
@ -43,34 +40,18 @@ public class NetUtil { |
|
|
|
|
throw new IllegalStateException("no available port."); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* find avaliable port |
|
|
|
|
* |
|
|
|
|
* @param defaultPort |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public static int findAvailablePort(int defaultPort) { |
|
|
|
|
return findAvailablePort(defaultPort,null); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* check port used |
|
|
|
|
* |
|
|
|
|
* @param port |
|
|
|
|
* @param ip 为空则为 InetAddress.anyLocalAddress() |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public static boolean isPortUsed(int port,String ip) { |
|
|
|
|
public static boolean isPortUsed(int port) { |
|
|
|
|
boolean used = false; |
|
|
|
|
ServerSocket serverSocket = null; |
|
|
|
|
try { |
|
|
|
|
if(StringUtils.isEmpty(ip)){ |
|
|
|
|
serverSocket = new ServerSocket(port); |
|
|
|
|
}else { |
|
|
|
|
serverSocket = new ServerSocket(); |
|
|
|
|
serverSocket.bind(new InetSocketAddress(ip,port)); |
|
|
|
|
} |
|
|
|
|
serverSocket = new ServerSocket(port); |
|
|
|
|
used = false; |
|
|
|
|
} catch (IOException e) { |
|
|
|
|
logger.debug(">>>>>>>>>>> xxl-job, port[{}] is in use.", port); |
|
|
|
|
used = true; |
|
|
|
|