如何找到可用端口?

新手上路,请多包涵

我想启动一个监听端口的服务器。我可以明确指定端口并且它有效。但我想以自动方式找到一个端口。在这方面我有两个问题。

  1. 我应该在哪个端口号范围内搜索? (我使用了端口 12345、12346 和 12347,没问题)。

  2. 如何确定给定端口是否未被其他软件占用?

原文由 Roman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 428
2 个回答

如果您不介意使用的端口,请将端口 0 指定给 ServerSocket 构造函数,它将侦听任何空闲端口。

 ServerSocket s = new ServerSocket(0);
System.out.println("listening on port: " + s.getLocalPort());

如果您想使用一组特定的端口,那么最简单的方法可能是遍历它们直到一个有效。是这样的:

 public ServerSocket create(int[] ports) throws IOException {
    for (int port : ports) {
        try {
            return new ServerSocket(port);
        } catch (IOException ex) {
            continue; // try next port
        }
    }

    // if the program gets here, no port in the range was found
    throw new IOException("no free port found");
}

可以这样使用:

 try {
    ServerSocket s = create(new int[] { 3843, 4584, 4843 });
    System.out.println("listening on port: " + s.getLocalPort());
} catch (IOException ex) {
    System.err.println("no available ports");
}

原文由 Graham Edgecombe 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果你将 0 作为端口号传递给 ServerSocket 的构造函数,它将为你分配一个端口。

原文由 Maurice Perry 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题