Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/04/2018, 02:49
sgrajaleshdz
 
Fecha de Ingreso: marzo-2016
Ubicación: World Wide Web
Mensajes: 30
Antigüedad: 8 años, 7 meses
Puntos: 3
Pregunta Problema con RMI al funcionar el maquinas distintas

Hola a todos de nuevo!!

Luego de un tiempo de avanzar en el programa de ciberControl que realizo con RMI, me surgió el siguiente problema, al correr mi servidor en la maquina designada para ello, y correr un cliente desde un laptop, me he encontrado con el problema de que hace todas las funciones, pero al tratar de desconectar el cliente del servidor, este no lo encuentra, he especificado los puertos de la siguiente manera...

Para el servidor el código es este:

Código Java:
Ver original
  1. public void iniciar() throws RemoteException, AlreadyBoundException{
  2.         Remote stub = UnicastRemoteObject.exportObject(new IConexion() {
  3.             @Override
  4.             public boolean conectarse(String ip) throws RemoteException {
  5.                 System.out.println("DEBUG: Llegó un nuevo cliente: Ip:"+ip);
  6.                 boolean estado = clientes.add(ip);
  7.                 CServidor.actualizarClientes(clientes);
  8.                 CServidor.Pcs(clientes);
  9.                 return estado;
  10.             }
  11.            
  12.            
  13.             @Override
  14.             public boolean desconectarse(String accion,String ip) throws
  15.               RemoteException {
  16.                 System.out.println("DEBUG: Salio el cliente de la Ip:"+ip);
  17.                 boolean estado =false;
  18.                 clientes.remove(ip);
  19.                 System.out.println(estado);
  20.                 CServidor.actualizarClientes(clientes);
  21.                 CServidor.Pcs(clientes);              
  22.                 CServidor.desconectarCliente(ip);//Aquí desconecto el cliente por medio de la ip....
  23.                if(accion.equals("RECONECTAR")) {//Aquí lo conecto de nuevo si es que se desea hacerlo..
  24.                    System.out.println("Funciona");
  25.                     CServidor.reconectaCliente(ip);
  26.                     clientes.add(ip);
  27.                     CServidor.actualizarClientes(clientes);
  28.                 }
  29.                 return estado;
  30.             }
  31.            
  32.         },puerto); ///El puerto le ingreso el '90'
  33.         try {
  34.         Registry registry = LocateRegistry.createRegistry(puerto);
  35.        
  36.         registry.bind("Servidor", stub);
  37.            
  38.             System.out.println("DEBUG: Estoy corriendo en:"+InetAddress.getLocalHost().getHostAddress()+":"+this.puerto);
  39.         } catch (UnknownHostException ex) {
  40.             Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
  41.         }
  42.     }

Este es el código de cliente:
Código Java:
Ver original
  1. public void iniciar() throws RemoteException, AlreadyBoundException{
  2.         Remote stub = UnicastRemoteObject.exportObject(new IClienteRemoto() {
  3.             @Override
  4.             public boolean mensaje(String accion) throws RemoteException {
  5.                 boolean estado = false;
  6.               //  System.out.println("DEBUG: "+accion);
  7.           //A partir de aquí son las funciones que ejecuta en la PC cliente
  8.                 if(accion.equals("BLOQUEAR")) {
  9.                     CCliente.bloquearPC();
  10.                     estado = true;
  11.                 }
  12.                 if(accion.equals("DESBLOQUEAR")){
  13.                     CCliente.desbloquearPC();
  14.                     estado = true;
  15.                 }
  16.                 if(accion.equals("APAGAR")){
  17.                     CCliente.apagarPC();
  18.                     estado = true;
  19.                 }
  20.                 if(accion.equals("REINICIAR")){
  21.                     CCliente.reiniciarPC();
  22.                     estado = true;
  23.                 }
  24.                 if(accion.equals("CANCELAR")){
  25.                     CCliente.cancelarPC();
  26.                     estado = true;
  27.                 }
  28.                 return estado;
  29.             }
  30.         },1090);//Puerto que uso para el cliente
  31.         Registry registry = LocateRegistry.createRegistry(1090);
  32.         registry.bind(this.ip, stub);
  33.     }

La cosa es que si ejecuto mi servidor, y mi cliente en la misma PC, todo funciona bien, es decir Bloquea, Desbloquea,Reinicia,Apaga,Cancela y funciona lo de Desconectar el cliente y Re-conectar el cliente

Pero si ejecuto el servidor en una PC y el cliente en otra, si me deja Bloquear, Desbloquear,Reiniciar,Apagar etc.. pero al tratar de desconectarse del servidor simplemente no procede...

Investigue que se debe a que debe darse la dirección IP del servidor es decir si es '192.168.1.25' y su puerto '90' el cliente debe hacer la petición a esa dirección.

Es por ello que recurro a usted, espero puedan ayudarme ya que he intentado todo lo que se me ha ocurrido pero simplemente no he podido encontrar solución alguna..

Dejo el siguiente código complementario de como Desconecto el cliente..:
Código Java:
Ver original
  1. public void desconectar(String accion,String ip_des, int port) throws RemoteException, NotBoundException{
  2.      try {
  3.        //String ip_me = InetAddress.getLocalHost().getHostAddress();
  4.          
  5.         //Registry registro = LocateRegistry.getRegistry(ip_me, port); Tambien he intentado pasar mi ip local, pero es el mismo resultado no funciona en 2 maquinas solo en un solo
  6.        
  7.         Registry registro = LocateRegistry.getRegistry(ip_des, port);
  8.         IConexion servidorRemoto = (IConexion) registro.lookup("Servidor");
  9.  
  10.             servidorRemoto.desconectarse(accion,ip_des);
  11.             CCliente.actualizarNombrePC("Desconectado");
  12.         } catch (UnknownHostException ex) {
  13.             Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
  14.         }
  15.     }


Gracias por leerme!!
__________________
Desbloquea esos limites...

Última edición por sgrajaleshdz; 07/04/2018 a las 02:55 Razón: Codigo mal escrito