socket recibir multiples enviar datos datagrama creación con clientes java tcp sockets udp

recibir - sockets en java pdf



¿Cómo se especifica un rango de puertos para sockets de Java? (4)

En Java puede dar el número cero como un parámetro único para el constructor Socket o DatagramSocket. Java vincula ese socket a un puerto libre a continuación. ¿Es posible limitar la búsqueda del puerto a un rango específico?


Aquí está el código que necesita:

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


Encuadernar el zócalo a cualquier puerto libre es (por lo general) una característica del soporte del zócalo del sistema operativo; no es específico de Java. Solaris, por ejemplo, admite el ajuste del rango del puerto efímero a través del comando ndd . Pero solo root puede ajustar el rango y afecta a todo el sistema, no solo a tu programa.

Si el comportamiento de enlace efímero regular no se ajusta a sus necesidades, probablemente tendrá que escribir el suyo usando Socket.bind ().


Hrm, después de leer los documentos, no creo que puedas. Puede enlazar a cualquier puerto, luego volver a enlazar si no es aceptable, o vincularse repetidamente a un puerto en su rango hasta que tenga éxito. El segundo método va a ser más "eficiente".

No me agrada esta respuesta, porque es ... poco elegante, pero tampoco puedo encontrar nada más: /


Puede echar un vistazo al código java que implementa la función que está utilizando. La mayoría de las bibliotecas de Java están escritas en Java, por lo que puede ver lo que necesita allí.

Asumiendo que @Kenster tenía razón y es una operación del sistema, puede que tenga que simplemente iterar sobre los puertos que intentan unirse a cada uno o probarlo. Aunque es un poco doloroso, no debería ser más que unas pocas líneas de código.