最近在搞页面一键操作自动化运维的事情,简单来说,就是把需要手工改配置,再通过shell启动节点的事情,全部通过代码和脚本串联起来。
本来有一步操作是手工配置端口,但自动化之后需要程序找到未被占用端口,并写入配置文件
目录
- 构思
- 代码实现
- 运行结果
- 命令行判断某个端口是否被占用
- 最后
构思
- 配置文件处有默认端口,一般来说用户使用时会参考默认端口依次递增,所以我这里找可用端口的思路也是会根据默认端口依次递增去递归找到未被占用端口
代码实现
package test;
import java.io.IOException;
import java.net.*;
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掉了
最后
- 好看的灵魂千篇一律,有趣的鲲志一百六七!
- 如果觉得文章还不错的话,可以点赞+收藏+关注 支持一下,鲲志的主页
- 如果有什么需要改进的地方还请大佬指出❌