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

Cita:
Iniciado por Fuzzylog Ver Mensaje
Pues analiza que ocurre cuando la IP es externa.

1º se debería guardar en el map datos.
2º al comparar que sale. ¿Hace lo que debe hacer?
3º igual hay que mandar alguna clase de respuesta a la máquina externa para que se entere de que se ha desconectado y el cliente actualice la interfaz.
Pues todo ello, ya lo hice y en teoría debió haber funcionado de esa forma pues indicaba al servidor que deseaba desconectar mi maquina cliente con la IP y el Puerto tal, sin embargo no lo hacia, así que decidí darle otro enfoque, pues si el servidor hace que el cliente obedezca, el cliente podría hacer lo mismo, por lo cual implemente un misma función pero en sentido inverso y funciono dejo el código por si a alguien le sirve;

Como envía instrucciones el Servidor al Cliente:
Código Java:
Ver original
  1. //Toma la ip del cliente al cual se le ordena el siguiente comando
  2.  public void bloquear(String ip) throws RemoteException, NotBoundException{
  3.         Registry registry = LocateRegistry.getRegistry(ip, 1090);//Busca la ip en su tabla de registros e indica el puerto
  4.         IClienteRemoto clienteRemoto = (IClienteRemoto) registry.lookup(ip);
  5.         clienteRemoto.mensaje("BLOQUEAR");//La accion que el cliente ejecutara
  6.     }

Como revise el Cliente la instrucción del Servidor:
Código Java:
Ver original
  1. public boolean mensaje(String accion) throws RemoteException {
  2.                 boolean estado = false;
  3.               //  System.out.println("DEBUG: "+accion);
  4.                 if(accion.equals("BLOQUEAR")) {
  5.                     CCliente.bloquearPC();
  6.                     estado = true;
  7.                 }
  8.                 if(accion.equals("DESBLOQUEAR")){
  9.                     CCliente.desbloquearPC();
  10.                     estado = true;
  11.                 }
  12.                 if(accion.equals("APAGAR")){
  13.                     CCliente.apagarPC();
  14.                     estado = true;
  15.                 }
  16.                 if(accion.equals("REINICIAR")){
  17.                     CCliente.reiniciarPC();
  18.                     estado = true;
  19.                 }
  20.                 if(accion.equals("CANCELAR")){
  21.                     CCliente.cancelarPC();
  22.                     estado = true;
  23.                 }
  24.                 return estado;
  25.             }

Por lo tanto implemente solo modifique la clase desconectar del Servidor para que reciba la instrucción del 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.          
  6.        
  7.         Registry registro = LocateRegistry.getRegistry(ip_des, port);//Indico la ip y el puerto por el cual se dirigirá
  8.         IConexion servidorRemoto = (IConexion) registro.lookup("Servidor");
  9.  
  10.             servidorRemoto.desconectarse(accion,ip_me);
  11.             CCliente.actualizarEstado("Desconectado");//Le digo a cliente que actualize su interfaz a Desconectado
  12.         } catch (UnknownHostException ex) {
  13.             Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
  14.         }
  15.     }

Bueno eso es todo espero sea de ayuda para alguien mas

Y gracias por la atención prestada al tema
__________________
Desbloquea esos limites...