Quel port est utilisé par la connexion Java RMI?
Pourrais-je savoir quel port est utilisé par Java RMI connexion?
Si je veux me connecter un client Java application sur un serveur Java application utilisant RMI connexion, ce port que j'ai besoin d'ouvrir à la machine serveur pour que le client l'application peut se connecter à elle?
Je veux mettre en place un pare-feu sur le serveur de la machine mais je ne sais pas quel port je dois ouvrir.
source d'informationauteur kwc
Vous devez vous connecter pour publier un commentaire.
RMI généralement ne fonctionne pas sur un pare-feu, car il utilise imprévisible ports (il commence 1099, puis s'enfuit avec un port aléatoire après que).
Dans ces situations, vous aurez généralement besoin de recourir à des tunnels RMI HTTP, ce qui est bien décrit ici.
Au RMI, à l'égard des ports, il y a deux mécanismes distincts impliqués:
1) Par défaut, le RMI Registry utilise le port 1099
2) le Client et le serveur (talons, des objets à distance) communiquer sur les ports aléatoires, à moins qu'un port fixe a été spécifié lors de l'exportation d'un objet distant. La communcation est lancé via un socket usine qui utilise 0 comme port de départ, ce qui signifie "utiliser n'importe quel port disponible" entre 0 et 65535.
Toutes les réponses sont incorrectes. Le Registre normalement utilise le port 1099, mais vous pouvez le modifier. Mais ce n'est pas la fin de l'histoire. Des objets à distance également utiliser le port, et pas nécessairement 1099.
Si vous ne spécifiez pas un port lors de l'exportationRMI utilise un port aléatoire. La solution est donc pour spécifier un numéro de port lors de l'exportation. Et c'est un port qui a besoin d'ouverture dans le pare-feu, le cas échéant.
Dans le cas où votre télécommande objet s'étend au -
UnicastRemoteObject
avoir son appel du constructeursuper(port)
avec une valeur non-nulle numéro de port.Dans le cas où il ne s'étend pas
UnicastRemoteObject
fournir un non-zéro numéro de port àUnicastRemoteObject.exportObject()
.Il y a plusieurs rides.
Si vous n'utilisez pas de prise d'usines et de vous fournir un non-zéro numéro de port lors de l'exportation de votre premier objet distant, RMI automatiquement part de ce port avec exportés par la suite des objets à distance sans port spécifié de chiffres, ou de la spécification de zéro. Ce premier objet à distance comprend un Registre créé avec
LocateRegistry.createRegistry().
Donc, si vous créez unRegistry
sur le port 1099, tous les autres objets exportés à partir de JVM peuvent partager le port 1099.Si vous sont à l'aide de socket usines et
RMIServerSocketFactory
a une judicieuse mise en œuvre deequals()
le même principe s'applique.Dans les deux conditions, vous pouvez utiliser le même non-zéro explicite numéro de port pour tous les objets à distance, par exemple
createRegistry(1099)
suivi d'un nombre quelconque desuper(1099)
ouexportObject(..., 1099)
appels.En général, vous définissez le port sur le serveur à l'aide de la rmiregistry de commande. Vous pouvez définir le port sur la ligne de commande, il sera par défaut à 1099
Si vous pouvez modifier le client, puis de l'imprimer la référence à distance et vous verrez ce port qu'il utilise. E. g.
va produire quelque chose comme:
Ai handle de serveur Proxy[ServerApi,RemoteObjectInvocationHandler[UnicastRef [liveRef: [endpoint:172.17.3.190:9001,id d'objet:[-7c63fea8:...
où vous pouvez voir le port 9001. Si la télécommande n'est pas en spécifiant le port, puis il va changer entre les redémarrages. Si vous souhaitez utiliser un port fixe, alors vous devez vous assurer que la télécommande constructeur de la classe fait quelque chose comme:
Dépend comment mettre en œuvre le RMI, vous pouvez définir le registre de port de la base de registre est un "point unique de services"). Si vous ne définissez pas un port explicite, le registre assumera le port 1099 par défaut. Dans certains cas, vous disposez d'un pare-feu et les pare-feu ne laissez pas votre rmi-client pour voir les talons et les objets derrière le registre, parce que ces choses sont en cours d'exécution dans randomically port, un port différent que le registre d'utilisation, et ce port est bloqué par le pare - feu, bien sûr.
Si vous utilisez
RmiServiceExporter
pour configurer votre RmiServer, vous pouvez utiliser la méthodermiServiceExporter.setServicePort(port)
résolu le port rmi, et ouvrir ce port dans le pare-feu.Edit: je résoudre ce problème avec ce post: http://www.mscharhag.com/java/java-rmi-things-to-remember
Avec référence à d'autres réponses ci-dessus, voici mon point de vue -
il y a des ports impliqué à la fois côté client et serveur.
pour le serveur distant, si vous exportez l'objet sans fournir un port , à distance de l'objet serait d'utiliser un port aléatoire à écouter.
un client, lors de la recherche de l'objet distant, il serait toujours utiliser un port aléatoire sur le côté et se connecter à distance l'objet de port comme indiqué ci-dessus.
Le port est disponible ici:
java.rmi.registry.Registry.REGISTRY_PORT
(1099)De la javadoc de
java.rmi.registry.Registry
En voir plus dans la javadoc de
java.rmi.de registre.LocateRegistry
.