目录
- 1 需求
- 2 实现
1 需求
我们在spingboot项目里面,想要判断一个某一个端口,在当前项目的服务器上面,有没有被使用,那么可以使用这个工具类
2 实现
代码语言:javascript复制/**
* net util
* 网络工具类
* @author jing
*/
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 RuntimeException("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.info(">>>>>>>>>>> xxl-job, port[{}] is in use.", port);
used = true;
} finally {
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
logger.info("");
}
}
}
return used;
}
// public static void main(String[] args) {
// System.out.println(findAvailablePort(8082));
// }
}