Necesito algo así como la función C getservbyname() para una aplicación Java. Tengo que analizar un archivo de configuración que puede contener un número de puerto o el nombre del servicio, y en este último caso, necesito convertirlo a un número de puerto para pasarlo a una biblioteca. Encontré this bug y me sorprendió un poco que la pregunta se hiciera en 1997 (!) Y que ni siquiera se considere su implementación durante 13 años. Realmente no quiero hacer el análisis sintáctico específico de la plataforma para mí, ¿hay alguna otra manera?¿Obtener el número de puerto para el nombre del servicio?
Respuesta
En this question encontré una biblioteca here que parece hacer todo lo posible para proporcionar la funcionalidad de plataforma cruzada.
Gracias por la pista .... Lamentablemente, se trata de una biblioteca con licencia LGPL que hace que sea bastante difícil de usar en mi proyecto EPL. Y utiliza Maven y atrae jruby y otra dependencia extraña (jaffl) cuyo sitio web aparentemente oficial http://kenai.com/projects/jaffl/ me dice que el proyecto no existe. – vwegert
La mayoría de las funciones nuevas añadidas a Java han tenido un caso de uso probado como una biblioteca de código abierto de Java desde hace algún tiempo. p.ej. la biblioteca de concurrencia solo se agregó después de que fuera una biblioteca independiente durante 6 años. Los cierres solo se agregan porque la mayoría de otros lenguajes dinámicos lo tienen ahora. (Y muy a regañadientes)
Estoy de acuerdo en que usted pensaría que esta función está disponible en Java, excepto, yo también lo haría, así que creo que muy poca gente lo usa.
La forma en que lo veo, lo que permite La conexión en red TCP sin la resolución de nombres de servicio a números de puerto es como permitir el acceso al sistema de archivos sin preocuparse por los directorios ... – vwegert
@vwegert - la mayoría de los códigos se refiere a servicios que usan cables físicos o puertos configurados * números * no nombres de puertos; p.ej. una pila de cliente Java http normalmente tiene los números de puerto predeterminados 80 y 433 integrados en el código. Probablemente incluso encuentre esto en el código C/C++. –
@Stephen C: ... y para los puertos por debajo de 1024 esa es una opción válida para tomar. En este caso (puerto del servidor de mensajes SAP), el número de puerto depende de algún otro parámetro (el número del sistema). Normalmente, el puerto se establece como sapms
Apache Tomcat proporcionan algunos JNI de unión para que:
package so3645405;
import org.apache.tomcat.jni.Address;
import org.apache.tomcat.jni.Library;
import org.apache.tomcat.jni.Sockaddr;
import org.apache.tomcat.jni.Socket;
public final class Net {
private Net() {
}
public static int getServByName(final String serviceName) {
try {
Library.initialize("tcnative-1");
long sa = Address.info(Address.APR_ANYADDR, Socket.APR_INET, 0, 0,
Library.globalPool());
Sockaddr addr = new Sockaddr();
Address.getservbyname(sa, serviceName);
Address.fill(addr, sa);
return addr.port;
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
public static void main(final String[] args) {
if (args.length > 0) {
System.out.println(Net.getServByName(args[0]));
} else {
System.out.println("Usage: prog <serviceName>");
}
}
}
de uso:
java -Djava.library.path=./ -classpath tomcat-coyote.jar;tomcat-juli.jar;.
so3645405.Net https
de salida:
443
Dependencias:
- Tiempo de compilación: tomcat-coyote.jar
- Tiempo de ejecución: tomcat-coyote.jar, tomcat-july.jar, tcnative-1 native lib.
probado bajo Win64
Gracias por la sugerencia, pero esta no es una aplicación basada en Tomcat. – vwegert
- 1. Obtener el nombre Mes del número del mes
- 2. Obtener el nombre del mes del número en PostgreSQL
- 3. ¿Cómo obtener el nombre del servicio de Windows desde app.config
- 4. ¿Cómo obtener el número de puerto actual en Flask?
- 5. ¿Cómo puedo obtener el puerto que escucha un servicio WCF?
- 6. Nombre de puerto a servicio en Java?
- 7. ¿Cómo obtener el nombre de host completo + número de puerto en Application_Start of Global.aspx?
- 8. ¿Elige dinámicamente el número de puerto?
- 9. Cómo obtener el nombre del país
- 10. Obtener el número del selector de contactos
- 11. Obtener el nombre del servidor de aplicaciones o la ip y el puerto en Java
- 12. número de puerto del servidor mysql
- 13. Cómo validar el nombre de host (puede ser IP) y el número de puerto (CString)
- 14. Obtener el nombre del elemento
- 15. Cómo especificar el nombre del puerto en php WSDL
- 16. Cómo analizar una URL JDBC para obtener el nombre de host, el puerto, etc.
- 17. Obtenga el número de puerto del servidor de tomcat sin una solicitud
- 18. Cambiando el puerto del System.Uri
- 19. scp con el número de puerto especificado
- 20. Comando de Windows para obtener el estado del servicio?
- 21. obtener el nombre de la aplicación del nombre del paquete
- 22. Cómo cambiar el número de puerto para apache en WAMP
- 23. regex para obtener el número del final de una cadena
- 24. Cambiar el puerto Oracle del puerto 8080
- 25. Número de puerto fuente de puerto
- 26. Necesito ayuda para obtener el número de puerto TCP y la dirección IP en C
- 27. Android: Recuperar el nombre del contacto del número de teléfono
- 28. ¿Cómo encontrar el número de puerto de la dirección IP?
- 29. ¿Cómo especificar el número de puerto en el emulador?
- 30. Cómo puedo obtener el nombre de contacto con su número
Niza. Un voto de bajada sin ningún comentario. Muy útil ... – vwegert