Bonjour à tous,
J'ai un problème de connexion sur un hôte distant avec JAVA RMI. J'ai cherché de mon côté et j'ai vu qu'il fallait mettre en place un Gestionnaire de sécurité avec un fichier qui porte l'extension .policy, c'est ce que j'ai fait (d'après moi le problème vient du gestionnaire de sécurité).
Je tiens quand même à préciser que mon code source fonctionne en local (le Serveur et le Client se trouvant sur la même machine). Par contre dés que je mets le Client sur une autre machine se trouvant (j'ai la neufbox de sfr) sur mon réseau local, j'ai un message d'erreur au niveau de la console ms-dos du client qui me dit (au passage les pare-feu sur les deux machines sont désactivés) :
Alors que je tente au niveau de mon code de me connecter au serveur qui a pour adresse ip : 192.168.1.80
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 java.rmi.ConnectException: Connection refused to host: 192.168.0.1 java.rmi.ConnectException: Connection timed out
Voici le code de mes classes :
Information.java :
TestRMIServer.java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 import java.rmi.*; public interface Information extends Remote { public String getInformation() throws RemoteException; }
Client.java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 import java.rmi.*; import java.rmi.server.*; public class TestRMIServer extends UnicastRemoteObject implements Information { public TestRMIServer() throws RemoteException { super(); } public String getInformation()throws RemoteException { return "bonjour"; } }
Serveur.java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.rmi.*; import java.rmi.server.*; import java.util.*; public class Client{ public static void main(String[] args) { System.out.println("Mise en place du Security Manager ..."); System.setProperty("java.security.policy", "./fic.policy"); System.setSecurityManager(new RMISecurityManager()); try { Remote r = Naming.lookup("rmi://192.168.1.80/TestRMI"); if (r instanceof Information) { String s = ((Information) r).getInformation(); System.out.println("chaine renvoyee = " + s); } } catch (Exception e) { e.printStackTrace(); } } }
fic.policy :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 import java.io.*; import java.rmi.*; import java.rmi.server.*; import java.util.*; public class Serveur{ public static void main(String[] args) { try { System.out.println("Mise en place du Security Manager ..."); System.setProperty("java.security.policy", "./fic.policy"); System.setSecurityManager(new RMISecurityManager()); TestRMIServer testRMIServer = new TestRMIServer(); System.out.println("Enregistrement du serveur"); Naming.rebind("TestRMI", testRMIServer); System.out.println("Serveur lance"); } catch (Exception e) { System.out.println("Exception capturée: " + e.getMessage()); } } }
Les commandes que je tape dans l'ordre respectivement sous ms-dos :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 grant { permission java.security.AllPermission; };
Si quelqu'un peut me dire s.v.p, pourquoi ce code ne fonctionne pas entre ces deux machines distantes ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 REM inutile de faire un rmic -vcompat, la dernière jvm REM le fait automatiquement à la compilation des classes cd \ cd Hello* start rmiregistry javac Information.java TestRMIServer.java Serveur.java Client.java java Serveur java Client
Merci d'avance à tous pour vos réponses
Partager