
java如何获取服务器端口号
用户关注问题
我在用Java写服务器应用,想知道代码里怎样获取服务器正在监听的端口号?
通过ServerSocket获取端口号的办法
如果你用ServerSocket来启动服务器,可以调用getLocalPort()方法来获得监听的端口号。例如:
ServerSocket serverSocket = new ServerSocket(0); // 端口为0则会自动分配
int port = serverSocket.getLocalPort();
System.out.println("服务器监听端口: " + port);
我使用的是Spring Boot或类似框架,想在控制器或服务中读取应用监听的端口号,应该怎么做?
借助ServletRequest或环境配置获取端口信息
在Java Web应用中,可以通过HttpServletRequest的getServerPort()方法获取当前请求所用的服务器端口,如:
int port = request.getServerPort();
另外,Spring Boot项目中可以通过环境变量spring.application.port或者获取server.port配置来知道应用的端口,如果端口是随机生成的,可以注入或监听应用启动参数来捕获。
我想写代码检查服务器上哪些端口在监听状态,有什么Java方式可以实现端口扫描?
使用Socket尝试连接判断端口开放状态
Java没有直接API列举服务器开放端口,但可以通过尝试连接端口来判断。例如,写一个循环遍历端口范围,用Socket尝试连接某个端口,如果连接成功或没有抛异常,则说明端口开放。示例:
try (Socket socket = new Socket()) {
socket.connect(new InetSocketAddress(host, port), timeout);
// 端口开放
} catch (IOException ex) {
// 端口未开放
}