Pergunta

Em Java você pode dar zero número como um único parâmetro para o construtor soquete ou DatagramSocket. se liga Java que a tomada a uma porta livre em seguida. É possível limitar a pesquisa a porta a uma gama específica?

Foi útil?

Solução

Hrm, depois de ler os documentos, eu não acho que você pode. Você pode ligar a qualquer porta, em seguida, religar se não é aceitável, ou repetidamente ligar a uma porta em sua faixa de até conseguir. O segundo método vai ser mais "eficiente".

Estou inquieto sobre esta resposta, porque é ... deselegante, mas eu realmente não pode encontrar qualquer outra coisa qualquer: /

Outras dicas

A ligação à tomada a qualquer porta livre é (geralmente) um recurso de suporte de soquete do sistema operacional; não é específico para java. Solaris, por exemplo, suportes ajustar o intervalo de portas efêmeras através do ndd comando. Mas somente o root pode ajustar o alcance, e isso afeta o sistema inteiro, não apenas o seu programa.

Se o comportamento de ligação efêmera regular não atender às suas necessidades, você provavelmente vai ter que escrever o seu próprio utilizando Socket.bind ().

Aqui está o código que você precisa:

public static Socket getListeningSocket() {
    for ( int port = MIN_PORT ; port <= MAX_PORT ; port++ )
    {
        try {
            ServerSocket s = new ServerSocket( port );
            return s;      // no exception means port was available
        } catch (IOException e) {
            // try the next port
        }
    }
    return null;   // port not found, perhaps throw exception?
}

que você pode olhar para o código Java que implementa a função que você está usando. A maioria das bibliotecas Java são escritos em Java, de modo que você pode ver o que você precisa lá.

Assumindo @Kenster estava certo e é uma operação do sistema, você pode ter que simplesmente iterar sobre portos tentando ligar a cada um ou testá-lo. Embora seja um pouco doloroso, ele não deve ser mais do que algumas linhas de código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top