J'ai une application client/serveur rmi très simple. Je n'utilise l'application « rmiregistry » bien, je l'utiliser pour créer le serveur:java Connexion RMI au serveur
server = new RemoteServer();
registry = LocateRegistry.createRegistry(PORT);
registry.bind("RemoteServer", server);
La partie client est:
registry = LocateRegistry.getRegistry(IPADDRESS, PORT);
remote = (IRemoteServer) registry.lookup("RemoteServer");
Voici le problème fascinant: L'application fonctionne parfaitement lorsque Le serveur et le client s'exécutent dans mon réseau local (privé). Dès que je mets le serveur sur un serveur public, l'application se bloque pendant une minute, puis me donne l'erreur suivante:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.ConnectException: Connection refused to host: 192.168.x.y; nested exception is:
java.net.ConnectException: Connection timed out: connect
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source ... (the rest is truncated)
La clé que je pense est que le client (en cours d'exécution sur mon réseau privé) ne peut pas se connecter à me (mon adresse est 192.168.xy où xy est d'autres chiffres, mais le vrai message d'erreur indique mon adresse IP indiquée là)
Si je tue le serveur rmi sur l'Internet, je reçois instantanément une message "connection denied to host: abcd"), donc je sais que quelque chose au serveur fonctionne au moins.
Des suggestions?
EDIT: juste pour rendre ceci un peu plus clair: 192.168.x.y est l'adresse du client, a.b.c.d est l'adresse du serveur. Le stacktrace montre que le client ne peut pas se connecter au client.
Utilisez-vous callbacks client RMI? –