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?¿Cómo se especifica un rango de puertos para sockets Java?
Respuesta
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".
Estoy inquieto por esta respuesta, porque es ... poco elegante, pero realmente no puedo encontrar nada más, ya sea:/
También debe tener en cuenta que a veces hay implicaciones de seguridad al hacer una búsqueda lineal de un puerto libre. Si usa el puerto A para el cliente 1 y el puerto A + 1 para el siguiente cliente, entonces el cliente 1 puede adivinar el puerto que va a usar para otro cliente. – Darron
Encuadernación la toma a cualquier puerto libre es (generalmente) una característica de la soporte de socket del sistema operativo; no es específico de Java. Solaris, por ejemplo, admite el ajuste del rango de puertos efímeros mediante el comando ndd. Pero solo root puede ajustar el rango y afecta a todo el sistema, no solo a tu programa.
Si el comportamiento de encuadernación efímero regular no se ajusta a sus necesidades, probablemente tendrá que escribir el suyo usando Socket.bind().
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 intentando unirlos a cada uno o probarlos. Aunque es un poco doloroso, no debería ser más que unas pocas líneas de código.
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?
}
Debería capturar BindException
, que es el que se inició cuando el puerto ya está en uso. –
Chochos
- 1. ¿Cómo se especifica un byte literal en Java?
- 2. Java Sockets & the Internet
- 3. Probando Java Sockets
- 4. ¿Cómo se especifica un valor predeterminado para VARIANT_BOOL?
- 5. en Java, ¿cómo lograr escanear puertos UDP?
- 6. Reenvío de puertos
- 7. Java Sockets and Dropped Connections
- 8. ¿Se requieren puertos Azure?
- 9. Sockets Java con datos fuera de banda
- 10. ¿Cómo se especifica un conjunto de reglas de MSBuild
- 11. ¿Cómo se especifica el tiempo de espera para XmlReader?
- 12. ¿Cómo se especifica un código de estado HTTP en Cakephp?
- 13. ¿Cómo se especifica un validador para un componente de entrada dentro de un componente compuesto?
- 14. En ANTLR, ¿cómo se especifica un número específico de repeticiones?
- 15. ¿Cómo se especifica el icono de py2app?
- 16. Asociatividad C99 para operadores: ¿dónde se especifica?
- 17. Sockets de Java: DataOutputStream o OutputStream?
- 18. ¿Cómo se especifica la longitud de un borde en graphviz?
- 19. Sockets Java: ¿puedo escribir un servidor TCP con un hilo?
- 20. ¿Cómo se obtiene un rango para devolver su nombre?
- 21. mapa java para el rango busca
- 22. Python + sockets
- 23. ¿Hay un OutputStream en el bloqueo de Java? (Sockets)
- 24. ¿Cómo obtener puertos en los que se escucha un proceso?
- 25. ¿Cómo se hace un rango en Rust?
- 26. ¿Cómo uso los sockets de dominio Unix de Java/Scala?
- 27. ¿Cómo se transmite un mensaje usando sockets UDP localmente?
- 28. Usando Flask Blueprints, ¿cómo arreglar url_for para que no se rompa si se especifica un subdominio?
- 29. ¿Cómo se especifica RPATH en un archivo MAKE?
- 30. Java, sockets, BufferedReader y readline colgar ... :(
Bueno, para que los usuarios no privilegiados que ya se limita a> 1024 en * nix: P – freespace
Por desgracia, se ejecutan en Windows;) –