Frage

In Java können Sie die Zahl Null als ein einziger Parameter für den Sockel oder Datagram Konstruktor geben. Java bindet das Socket an einen freien Port dann. Ist es möglich, die Port-Lookup auf einen bestimmten Bereich zu begrenzen?

War es hilfreich?

Lösung

Hrm, nachdem die Dokumentation zu lesen, ich glaube nicht, Sie können. Sie können entweder binden an jedem Port, dann erneut binden, wenn es nicht akzeptabel ist, oder binden wiederholt an einen Port in Ihrem Bereich, bis Sie Erfolg haben. Die zweite Methode wird die meisten „effizient“ sein.

Ich bin beunruhigt über diese Antwort, weil es ... unelegant, aber ich kann wirklich nichts anderes entweder finden: /

Andere Tipps

Die Bindung der Buchse an einen freien Port (in der Regel) ein Merkmal der Buchse Unterstützung des Betriebssystems; es ist nicht spezifisch für Java. Solaris zum Beispiel unterstützt den temporären Portbereich Einstellung durch die NDD Befehl. Aber nur root kann den Bereich einzustellen, und es wirkt sich auf das gesamte System, nicht nur das Programm.

Wenn der reguläre ephemeren Bindungsverhalten nicht Ihren Vorstellungen entsprechen, werden Sie wahrscheinlich schreiben müssen Sie Ihre eigene mit Socket.bind ().

Hier ist der Code, den Sie brauchen:

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?
}

Das könnte dir Blick auf den Java-Code, der die Funktion implementiert Sie verwenden. Die meisten der Java-Bibliotheken sind in Java geschrieben, so dass Sie vielleicht nur sehen, was Sie dort benötigen.

Unter der Annahme, @Kenster war richtig und es ist ein Betrieb des Systems, müssen Sie unter Umständen nur über die Ports laufen versuchen, jeden oder testen zu binden. Obwohl es ein wenig schmerzhaft ist, sollte es nicht mehr als ein paar Zeilen Code sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top