2012-09-22 30 views
5

Soy nuevo en tecnología Java RMI. Tengo un problema que ya tenían otros programadores, pero no pude entender lo que hicieron en los tutoriales para resolverlo. Implementé el juego "tic tac toe" con Java RMI. Aquí el código ControllerServerconexión rechazada en 127.0.1.1 java RMI

public ControllerServer() { 

    try { 
     game = new GameImpl(); 
     BoardView view = new BoardView(this); 
     viewUpdater = new ServerViewUpdaterImpl(view); 

     Game gameStub = (Game) UnicastRemoteObject.exportObject(game, 1099); 
     ServerViewUpdater serverViewStub = (ServerViewUpdater) UnicastRemoteObject.exportObject(viewUpdater, 1099); 

     Registry registry = LocateRegistry.createRegistry(1099); 

     registry.rebind("TTTGame", gameStub); 
     registry.rebind("TTTServerView", serverViewStub); 


    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

y aquí el ControllerClient

public ControllerClient() { 
    try { 

     BoardView view = new BoardView(this); 
     localView = new ClientViewUpdaterImpl(view); 

     String address = JOptionPane.showInputDialog("Insert server's address: "); 

     Registry registry = LocateRegistry.getRegistry(address, 1099); 

     game = (Game) registry.lookup("TTTGame"); 
     remoteView = (ServerViewUpdater) registry.lookup("TTTServerView"); 
     remoteView.registerClientView(localView); 


    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

Funciona a nivel local, mediante la inserción de "localhost" "127.0.0.1" o mi red externa IP. No funciona si el cliente y el servidor se ejecutan en máquinas diferentes.

Obtuve la excepción "conexión rechazada por 127.0.1.1". No entiendo por qué están tratando de usar una dirección de host local en algún punto de la ejecución.

+0

¿Obtiene la excepción en la búsqueda o al ejecutar su método remoto? – EJP

+0

en la búsqueda. Prácticamente, obtiene el registro en el host local, en lugar del registro accesible en la dirección del servidor. Luego la búsqueda se ejecuta. Como encuentra cualquier registro en el servidor local (¡por supuesto, el registro está en el servidor!) Va en una excepción. – user1384636

+0

Hay algo mal aquí. Solo buscará un registro en el host local si proporciona la dirección IP del host local a 'LocateRegistry.getRegistry()'. Si proporciona la dirección IP del servidor, buscará el Registro del servidor. Si la excepción dice 'conexión rechazada por 127.0.1.1', eso es * prima facie * evidencia que suministró 127.0.1.1 a 'LocateRegistry.getRegistry().' O bien la recibió en la llamada no en la búsqueda. – EJP

Respuesta

3

como el otro dijo, esta es la playa de su IP se establece en 127.0.1.1

Ejecutar un ipconfig -a para ver cuál es la dirección IP de su servidor.

luego editar el archivo /etc/hosts y en vez de esta línea 127.0.1.1 "name of the host" reemplazar el 127.0.1.1 con la IP de la máquina.

Esto debería funcionar.

Siempre se puede validar el IP que el servidor RMI está escuchando, mediante la ejecución:

String hostname = InetAddress.getLocalHost().getHostAddress(); 
Log.info("this host IP is " + hostname); 

Si sobrescribe el archivo /etc/hosts con la IP correcta, entonces todo debería funcionar.

1

Esto se debe a que es muy probable que su IP sea incorrecta. Es 127.0.0.1 y no 127.0.1.1. Puedes probarlo también con localhost.

+0

¿Qué quiere decir con "su IP es muy probablemente incorrecto"? – user1384636

+0

Es 127.0.1.1, también es localhost. – user1384636

+0

@ user1384636 Pero el Registro que desea no está en el host local. Está en el servidor host. – EJP

2

Tiene la dirección incorrecta cuando llama a getRegistry(). Debe proporcionar la dirección del host del servidor. Normalmente no hay un registro de RMI ejecutándose en un host de cliente.

Cuestiones relacionadas