J'ai besoin de quelque chose comme la fonction C getservbyname() pour une application Java. Je dois analyser un fichier de configuration qui peut contenir un numéro de port ou le nom du service, et dans ce dernier cas, je dois le convertir en numéro de port pour le transmettre à une bibliothèque. J'ai trouvé this bug et j'étais un peu étonné que la question ait été posée en 1997 (!) Et qu'elle n'ait même pas été considérée pour une mise en œuvre pendant 13 ans. Je ne veux pas vraiment faire les analyses syntaxiques spécifiques à la plate-forme pour moi-même - y a-t-il un autre moyen?Obtenir le numéro de port pour le nom du service?
Répondre
En this question J'ai trouvé une bibliothèque here qui semble faire de son mieux pour fournir cette fonctionnalité multiplateforme.
Merci pour l'indice .... Malheureusement, c'est une bibliothèque sous licence LGPL qui rend difficile l'utilisation de mon projet EPL. Et il utilise Maven et tire dans jruby et une autre dépendance étrange (jaffl) dont le site Web apparemment officiel http://kenai.com/projects/jaffl/ me dit que le projet n'existe pas .. – vwegert
La plupart des nouvelles fonctionnalités ajoutées à Java ont un cas d'utilisation éprouvé en tant que bibliothèque Java open source depuis un certain temps. par exemple. la bibliothèque de concurrence n'a été ajoutée qu'après avoir été une bibliothèque autonome pendant 6 ans. Les fermetures ne sont ajoutées que parce que la plupart des autres langages dynamiques l'ont maintenant. (Et très à contrecœur)
Je suis d'accord que vous pensez que cette fonction est disponible en Java sauf, je voudrais aussi, je pense que très peu de gens l'utilisent.
La façon dont je le vois, permettant La mise en réseau TCP sans la résolution des noms de service aux numéros de port est comme permettre l'accès au système de fichiers sans se soucier des répertoires .... – vwegert
@vwegert - la plupart du code fait référence aux services utilisant des fils durs ou des numéros de ports configurés; par exemple. une pile de client HTTP Java a généralement les numéros de port 80 et 433 par défaut intégrés dans le code. Vous trouverez probablement cela dans le code C/C++. –
@Stephen C: ... et pour les ports inférieurs à 1024 c'est une option valide à prendre. Dans ce cas (port du serveur de messages SAP), le numéro de port dépend d'un autre paramètre (le numéro de système). Habituellement, le port est défini comme sapms
Apache Tomcat fournissent une JNI obligatoire pour 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>");
}
}
}
Utilisation:
java -Djava.library.path=./ -classpath tomcat-coyote.jar;tomcat-juli.jar;.
so3645405.Net https
sortie:
443
Dépendances:
- Temps de construction: tomcat-coyote.jar
- Temps d'exécution: tomcat-coyote.jar, tomcat-july.jar, tcnative-1 lib.
Testé sous win64
Merci pour l'indice, mais ce n'est pas une application basée sur Tomcat. – vwegert
- 1. Comment obtenir le numéro de port pour iPhone Chatting Application
- 2. Comment obtenir le nom du port de l'imprimante?
- 3. Comment obtenir le numéro de port COM réel avec SetupDiGetDeviceRegistryProperty
- 4. Comment obtenir le numéro de port d'addrinfo dans unix c
- 5. comment changer le numéro de port
- 6. Comment obtenir le numéro de port Websphere 6.1
- 7. Comment obtenir le nom d'hôte complet + numéro de port dans Application_Start of Global.aspx?
- 8. numéro de port dans le serveur
- 9. Problème après l'attribution du numéro de port à l'instance nommée MSSQL2005: Le service ne démarre pas
- 10. Comment valider le nom d'hôte (peut être IP) et le numéro de port (CString)
- 11. Numéro de port du serveur mysql
- 12. quel est le nom d'hôte rediffmail et hotmail et le numéro de port?
- 13. Obtenir le nom de l'assembly d'appel dans le service WCF
- 14. Quel est le port pour une requête de nom d'hôte?
- 15. Comment obtenir le numéro du nœud sélectionné
- 16. iPhone SDK: Obtenir le nom du contact à partir du numéro de téléphone
- 17. Comment trouver le numéro de port de l'appelant d'un service Web dans ASP.NET?
- 18. Obtenir le nom et le modèle du téléphone
- 19. Obtenir le port de destination dans WSPSend
- 20. Numéro de port
- 21. Obtenir le numéro du mois depuis le nom d'une autre langue
- 22. Comment obtenir le numéro d'instance
- 23. numéro de port client
- 24. Obtenir le nom du fournisseur de SCSI
- 25. SSH Le transfert de port entraîne la perte du qualificatif de port pour le navigateur local?
- 26. uri_for inclut le numéro de port sur les redirections
- 27. comment obtenir le port oracle non de la requête sql
- 28. Comment obtenir le nom de l'appelant dans le code?
- 29. Obtenir le nom de l'ordinateur dans un service Windows?
- 30. Récupération du nom d'utilisateur et du nom d'ordinateur du client dans le service Web
Nice. Un drive-by down vote sans aucun commentaire. Très utile ... – vwegert