Faire marcher RMI ... avec des ordinateurs distant (par internet)

Dominique49 Messages postés 148 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 19 juin 2016 - 28 juil. 2011 à 09:15
Dominique49 Messages postés 148 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 19 juin 2016 - 12 août 2011 à 10:00
Bonjour à tous,
ça fait des mois que je cherche à faire cela. Jusque là, je n'ai pas trouvé grand monde qui connaisse bien RMI ... j'espère qu'ici il y a des connaisseurs
Bon, venons en au fait
J'ai fait une application de Tchat client Serveur avec RMI.
ça marche en réseaux local ...
Mais ce que je cherche à faire, c'est que ça marche avec un autre ordi distant, connecté à internet, cela va de soi ...

Alors ce que j'ai fait, c'est que, à la récupération du registre de l'ordi serveur, au lieu de saisir le nom du PC, je rentre l'aresse IP. (pas l'adresse IP locale, l'adresse IP internet)
ça marche aussi bien en réseaux local ... mais ça marche pas avec un ordi distant !!
Voilà le bout de code en question :

Côté client :

try {
       LocateRegistry.createRegistry(1099);
       alert("rmiregistry bien lancé !");
} catch (RemoteException e1) {
       System.err.println("rmiregistry est déjà lancé sur ce port");
       alert("Erreur au lancement de rmiregistry.");
}

try {

r = LocateRegistry.getRegistry("192.168.1.14");
alert("connexion avec 192.168.1.14 effective");

} catch (Exception e) {
alert("Erreur lors de la connexion à la machine 192.168.1.14 !");
e.printStackTrace();



Donc dans ce code, j'ai récupéré le registre distant grâce à l'IP : "192.168.1.14". ça marche aussi bien avec "blanc", car c'est le nom de mon PC.
Bon, le pb, c'est que ça ne marche pas ...
enfin, l'erreur ne vient pas de ce bout de code, mais du .lookup()

Bon, après mûre réflexion, je me suis dit que la classe LocatRegitry ne s'appelait pas comme ça pour rien ... et donc que LocateRegistry ne marche qu'en réseaux local ... c'est vrai ?
Dans ce cas, commet communiquer avec un PC distant sur internet ?!
Merci d'avance.

EDIT

Si vous désirez le reste du code, dites le moi, bien que je doute que ce soit très utile ...

37 réponses

Dominique49 Messages postés 148 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 19 juin 2016
29 juil. 2011 à 18:24
Hum, je n'y ai pas accès, toujours à cause de ce contrôle, mais j'ai le bon fichier ...
Donc j'ai commencé à regarder ça, un commentaire m'étonne :
/*java -Djava.security.policy=firsttry.policy Client/GameGui localhost 12345*/
qu'es-ce que ça veux dire ?
C'est des commandes dos ? j'ai pas les commande dos ...

Bon, sinon, ça marche pas ...
En fait, tout le bp tourne autour du registre.
si je fait r = getRegistry("blanc"), ça marche, sinon, ça marche pas ...
Pareil pour naming. Avec ou sans sécurité, c'est pareil ...
0
Utilisateur anonyme
29 juil. 2011 à 19:08
Tu dois taper ça dans l'invite de commande en adaptant ça pour windows (java.exe au lieu de java). L'option -D etc... sert à spécifier le chemin du fichier dont je parlais. Le paramètre suivant indique la classe du client à lancer, après c'est le domaine et enfin le port. Il faut lancer le serveur avant de lancer le client évidemment. A plus tard. Je ne suis pas disponible ce soir, j'essayerai de te répondre dimanche si possible. Bon courage.






T.U.E.R (First Person Shooter créé par Julien Gouesse)
0
Dominique49 Messages postés 148 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 19 juin 2016
30 juil. 2011 à 08:39
Zut de zut, l'ennui c'est que mon admin à interdit les invites de commandes ... parce qu'avec les commande DOS, on peu effectivement terminer pas mal de processus gênant tel qu'un limiteur de temps ... (seulement il a oublié d'interdire le vbs )
Bon, pour passer aux choses sérieuse, c'est fort ennuyeux ...
Je vais donc chercher l'équivalent de ces options -D ...
J'ai cherché un peu, mais j'ai pas trouvé ... apparemment, ça ne correspond pas au classpath ... pour les autre paramètres, j'ai juste changé un peu le constructeur, mais pour ces options -D, ne sachant pas à quoi ça correspond ... (j'ai encore beaucoup à apprendre).
Je continue mes recherches.

En tout cas, merci beaucoup, je ne sait pas comment j'aurais fait sans toi !

NB

Si on ne peu pas se passer des commandes DOS, mon admin me permettra sans doute de faire des tests avec, mais je ne pourrais pas tester quand je voudras ... mais enfin, il doit bien y avoir un équivalent java
0
Dominique49 Messages postés 148 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 19 juin 2016
30 juil. 2011 à 09:03
Ouf, j'ai fini par dénicher ce qu'il me fallait !
http://publib.boulder.ibm.com/infocenter/realtime/v1r0/topic/com.ibm.rt.doc.10/user/specifying_options.html

Bon, mais les options système", je ne connais pas, je vais étudier ça ...
en attendant, ça ne me donne pas la possibilité d'éviter les invite de commande ... à moins d'utiliser la troisième solutions que je ne connais pas mais que je vais étudier sur le champs.
Merci beaucoup.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dominique49 Messages postés 148 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 19 juin 2016
30 juil. 2011 à 09:32
Bon ... impossible avec la variable d'environnement, car je n'y ai pas accès naturellement ...
Mais au fait, je ne connais pas le fonctionnement de ces "options systèmes" ... Tu aurais un tuto sur ça, je n'ai pas trouvé ...
0
Utilisateur anonyme
30 juil. 2011 à 11:15
Bonjour

Sous Windows, dans le panneau de configuration, il y a un raccourci pour configurer Java. Il faudra soit passer par Java Web Start soit par un script BAT pour utiliser les bons arguments à passer à la JVM, c'est ce que je fais dans mon jeu pour désactiver DirectDraw pour éviter des conflits avec OpenGL quand je lance la JVM. Tu peux regarder dans le fichier dont le lien se trouve dans ma signature ci-dessous.













T.U.E.R (First Person Shooter créé par Julien Gouesse)
0
Dominique49 Messages postés 148 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 19 juin 2016
30 juil. 2011 à 11:32
ok, l'ennui c'est que naturellement, les fichiers .bat sont interdits d'exécution ...
Mais bon, je vais demander à mon admin.
Mais tu a parlé d'aller configurer Java ... mais pour le configurer, il faut juste le configurer une fois et c'est tout ?
Si on le configure en lui précisant un fichier, c'est parfait, comme ça je n'aurais plus qu'a changer dans le fichier en question ...

Mais ... le tuto d'oracle n'a pas parlé de ça ... c'est vraiment obligatoire ? Bon, si tu dis que ça résous tout les pb ... mais l'autre problème, c'est que le logiciel perd sa portabilité ...
Enfin, il n'y a pas grand chose à changé pour l'adapter à différents système d'exploitation, mais ce n'est plus ce que l'on appelle portable ...

NB

Mais n'y a-t-il pas d'autre solutions ?
Parce que si on utilise un .bat, il faudrait être admin pour exécuter le programme, et comme tout le monde n'est pas admin ...

Par exemple j'ai voulu essayer Heli-X qui est un jeux vidéo Java (c'était pour voir les possibilités de Java ), mais pas moyen car il se lance avec un .bat ...

Bon, merci beaucoup.
0
Dominique49 Messages postés 148 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 19 juin 2016
30 juil. 2011 à 13:14
Salut, au passage, j'aimerai bien savoir comment on appelle ce que tu as utilisé dans ton fichier .policy ... c'est pour faire des recherches (il faudrait les mots clés)

grant{
permission java.net.SocketPermission "*:1024-65535", "connect,accept";
permission java.net.SocketPermission "*:80", "connect";
};


Je n'ai jamais vu ce genre de code ... tu aurais un tuto sur ce genre de choses ? Sans les mots clés, je ne peu pas trouver ...
Merci bien ...
0
Utilisateur anonyme
30 juil. 2011 à 14:16
Mets le fichier que tu viens de citer dans le JAR de l'application, suis le tutoriel d'Oracle pour créer les JARs et utiliser Java Web Start. Inspire-toi de mon fichier "tuer.jnlp", remplace le truc "noddraw" par l'option "-D..." et "tuer.jar" par ton propre JAR, vire les trucs en rapport avec JOGL si tu n'en as pas besoin. Il faut au moins que ton admin autorise Java Web Start.

J'ai appris ça en cours de Master STL à Jussieu en PC2R, tu peux retrouver notre cours, il est en ligne.













T.U.E.R (First Person Shooter créé par Julien Gouesse)
0
Utilisateur anonyme
30 juil. 2011 à 14:20
Tu mets ça dans le fichier JNLP et ça marchera partout, voilà :















T.U.E.R (First Person Shooter créé par Julien Gouesse)
0
Dominique49 Messages postés 148 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 19 juin 2016
10 août 2011 à 17:59
D'abord, merci beaucoup !!!
Et ensuite, excuse moi pour mon absence prolongé, j'ai eu de gros problèmes de réseaux ... forcément, les soupçons sont tombés sur moi alors que c'était le pare-feu d'un autre virus ... Bref, de pépins en tuiles, je n'ai pas beaucoup avancé jusqu'à aujourd'hui où tout est revenu dans l'ordre, et même mieux parce que mon admin a fini par me laisser les invites de commandes. J'ai donc essayé mes anciens prg qui marchaient pas en ligne de comment, en précisant -D java.security.policy=xxxx.policy
ça marche impec ! Même le paref-feu Window laisse passer ...
En bref, merci beaucoup !
En fait, ça marchait avant en réseaux local, uniquement parce que nos pare-feu étaient COMODO, et qu'il s'est montré très tolérant ...

En fait, Java Web Start n'a jamais marché sur mon PC ...
Mon admin m'a enlevé toutes les restrictions et m'a mis en administrateur, rien n'y fait, j'ai toujours la même erreur. aucun jnlp ne amrche de toute façon sur mon PC, mais ils marchent sur les autres ... Bon, mais comme ça marche avec les .bat, je verrais les jnlp plus tard.
Voici l'erreur si ça t'intéresse (produite par tuer.jnlp sur mon PC)

java.net.MalformedURLException: unknown protocol: socket
at java.net.URL.(Unknown Source)
at java.net.URL.(Unknown Source)
at java.net.URL.(Unknown Source)
at java.net.URI.toURL(Unknown Source)
at com.sun.deploy.net.proxy.DeployProxySelector.connectFailed(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at com.sun.deploy.net.BasicHttpRequest.doRequest(Unknown Source)
at com.sun.deploy.net.BasicHttpRequest.doGetRequestEX(Unknown Source)
at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResource(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResource(Unknown Source)
at com.sun.javaws.Launcher.updateFinalLaunchDesc(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)


et une autre parès celle là :

com.sun.deploy.net.FailedDownloadException: Impossible de charger la ressource : http://tuer.sourceforge.net/tuer.jnlp
at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResource(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResource(Unknown Source)
at com.sun.javaws.Launcher.updateFinalLaunchDesc(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)


En tout cas, merci infiniment.
Il me reste à essayé avec des PC distants ....
Merci encore, et a+
0
Dominique49 Messages postés 148 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 19 juin 2016
10 août 2011 à 18:02
Oups, une dernière question !
Le pb, c'est que maintenant, quand je veux faire un essai, il faut que j'exporte le projet etc.

Pour éviter ça, j'ai donc essayer d'exécuter directement le contenu du répertoire bin en invites de commandes.

Seulement, ça ne marche pas ... ça me fait un Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Address

Je vais essayer de résoudre ça tout seul, mais si tu sait ou mieux, si tu sait comment définir l'option -D directement sur Eclipse ...

merci beaucoup.
0
Dominique49 Messages postés 148 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 19 juin 2016
10 août 2011 à 18:40
Aïe !!!
Fausse joie, à peine ai-je rajouté ça que ça fait tout foirer !
if(System.getSecurityManager()==null)
    System.setSecurityManager(new RMISecurityManager());


L’erreur :


D:\>java -jar Serveur.jar -D java.security.policy=security.policy
java.security.AccessControlException: access denied (java.net.SocketPermission 1
27.0.0.1:1099 connect,resolve)
        at java.security.AccessControlContext.checkPermission(Unknown Source)
        at java.security.AccessController.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkConnect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.(Unknown Source)
        at java.net.Socket.(Unknown Source)
        at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown S
ource)
        at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown S
ource)
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
        at sun.rmi.server.UnicastRef.newCall(Unknown Source)
        at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
        at MessengerImpl2.(MessengerImpl2.java:97)
        at MessengerImpl2.main(MessengerImpl2.java:128)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)


L'ennui, c'est que je peu mettre n'importe quel nom à la place de security.policy, aucune réaction ... c'est normal ? Pourtant, ce fichier existe bien et permet les ports de 1024-65535 ...
Le code , c'est le tiens :

grant{
permission java.net.SocketPermission "*:1024-65535", "connect,accept";
permission java.net.SocketPermission "*:80", "connect";
};


Je vais essayer avec Naming ...
0
Dominique49 Messages postés 148 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 19 juin 2016
10 août 2011 à 19:27
Pas moyen, avec ou sans sécurité, avec .policy , avec Locate Registry ou Naming, c'est pareil, rien à faire ...
0
Utilisateur anonyme
11 août 2011 à 19:30
Bonsoir

Pour Java Web Start, ton problème a été résolu ici :
http://wurmonline.com/forum/index.php?topic=34441.0

Pour RMI, il n'y a pas d'espace entre "-D" et "java.security.policy=" d'où ton erreur. C'est pourtant bien marqué dans la ligne de commande fournie avec mon exemple.

Dans Eclipse, il faut aller dans "VM arguments" dans la configuration de Debug ou de Run.

Bon courage.













T.U.E.R (First Person Shooter créé par Julien Gouesse)
0
Dominique49 Messages postés 148 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 19 juin 2016
12 août 2011 à 10:00
Salut, merci beaucoup pour Java Web Start.
En ce moment, il y a des conflit réseaux entre mon PC habituel et un autre, donc je travaille ailleurs, donc je vais pas pouvoir tester sur mon ancien PC pour Java Web Start ... Mais c'est la première chose que je ferais quand je le reprendrai !

Pour l'espace, je l'avais bien remarqué, seulement, comme ce même bout de code avait résolu le problème en local ...
Je vais essayer comme tu dis, merci beaucoup.
0
Rejoignez-nous