java:判断某个端口是否被占用,以及递归找到可使用端口
构思
- 配置文件处有默认端口,一般来说用户使用时会参考默认端口依次递增,所以我这里找可用端口的思路也是会根据默认端口依次递增去递归找到未被占用端口
代码实现
代码语言:javascript代码运行次数:0运行复制package test;
import java.io.IOException;
import java.*;
import java.util.Enumeration;
public class GetLocalHost {
public static void main(String[] args) throws Exception {
int inputPort = 8400;
System.out.println("输入端口:" + inputPort + ", 递增递归找到可用端口为:" + getUsablePort(inputPort));
}
/**
* 根据输入端口号,递增递归查询可使用端口
* @param port 端口号
* @return 如果被占用,递归;否则返回可使用port
*/
public static int getUsablePort(int port) throws IOException {
boolean flag = false;
Socket socket = null;
InetAddress theAddress = InetAddress.getByName("127.0.0.1");
try{
socket = new Socket(theAddress, port);
flag = true;
} catch (IOException e) {
//如果测试端口号没有被占用,那么会抛出异常,通过下文flag来返回可用端口
} finally {
if(socket!=null) {
//new了socket最好释放
socket.close();
}
}
if (flag) {
//端口被占用,port + 1递归
port = port + 1;
return getUsablePort(port);
} else {
//可用端口
return port;
}
}
}
运行结果
与实际相符,则正确
命令行判断某个端口是否被占用
- 命令行查询端口
lsof -i:[端口号]
- kill掉该端口
kill 3187244
- 再次查看端口就会发现已经被kill掉了