如何在端口范围内找到开放端口?

Eri*_*pir 8 java networking

我想在某个范围内找到一个开放的本地端口.

如何在不连接端口的情况下以最有效的方式完成此操作.

KAR*_*ván 6

如果你想找到一个本地开放端口来绑定服务器,那么你可以创建一个ServerSocket,如果它没有抛出异常,那么它是打开的.

我在其中一个项目中做了以下事情:

private int getAvailablePort() throws IOException {
    int port = 0;
    do {
        port = RANDOM.get().nextInt(20000) + 10000;
    } while (!isPortAvailable(port));

    return port;
}

private boolean isPortAvailable(final int port) throws IOException {
    ServerSocket ss = null;
    try {
        ss = new ServerSocket(port);
        ss.setReuseAddress(true);
        return true;
    } catch (final IOException e) {
    } finally {
        if (ss != null) {
            ss.close();
        }
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

RANDOM是一个ThreadLocal在这里,但当然你可以在那里做一个增量部分.