2017-10-12 2 views
-1

Ich versuche, zwei DatagramSockets auf benachbarte Ports als solche zu initialisieren:Java Datagram binden an zwei aufeinander folgenden offenen Ports

int iport = 5000; 
DatagramSocket sock1 = new DatagramSocket(iport); 
DatagramSocket sock2 = new DatagramSocket(iport + 1); 

Dies ist jedoch schlägt fehl, wenn Port 5000 oder 5001 nicht verfügbar ist. Es ist mir egal, an welche Ports ich binde, solange sie die Bedingung sock1.getPort() + 1 == sock2.getPort() erfüllen. Gibt es eine einfache Möglichkeit, zwei benachbarte Ports zu finden, ohne über alle verfügbaren Ports zu iterieren und zu versuchen, an jeden von ihnen zu binden, bis ich zwei finde, die funktionieren?

+1

Sie möchten wahrscheinlich Ports wählen, die noch nicht für andere Protokolle reserviert sind: _ [Service Name und Transport Protocol Port Number Registry] (https://www.iana.org/assignments/service-names-port-numbers/service- Namen-Port-Nummern.xhtml) _. –

+0

Warum? Die Anforderung ist völlig unpraktisch. Und wenn es dir egal ist, was sie sind, warum kümmert es dich, dass sie benachbart sind? Warum brauchst du überhaupt zwei Steckdosen? – EJP

+0

Ich kommuniziere mit einem Server, der aus irgendeinem Grund Antworten an den Port sendet, der höher ist als der Port, von dem ich gesendet habe. Macht nicht viel Sinn, aber ich habe keinen Zugriff auf den Server-Code ... – kmell96

Antwort

0

DatagramSocket() Lassen Sie OS wählen Sie einen freien Port für Sie, während DatagramSocket(port) versuchen, einen bestimmten Port zu erhalten.

So können Sie es wie folgt tun:

DatagramSocket sock1 = null; 
DatagramSocket sock2 = null; 

while (sock2 == null) { 
    sock1 = new DatagramSocket(); 
    try { 
     sock2 = new DatagramSocket(sock1.getLocalPort() + 1); 
    } catch (java.net.BindException ex) { 
     sock1.close(); 
    } 
} 

Die while Schleife hier ist, weil es eine sehr geringe Chance, dass sock1 Hafen + 1 bereits binded werden.

Verwandte Themen