Ya vimos en un ejercicio anterior cómo conectar un socket cliente y uno servidor para mandar mensajes.
Enviar mensajes no tiene gran utilidad, ¿no sería mejor poder llamar a algunas funciones en el servidor? esto es justamente lo que hace RMI en Java. Declaramos el servidor, el cliente, y la interfaz que servirá como “pegamento” entre estos dos y que se encargará del paso de parámetros.
Después, desde el cliente llamamos a las funciones declaradas anteriormente.
De esta manera, todos los métodos se ejecutarán en el servidor. En este caso haremos una calculadora, para no hacer el post muy largo, pero podemos hacer miles de cosas; se me ocurre, por ejemplo, conectar a una base de datos.
En fin, vamos allá.
Comencemos con la interfaz remota, como lo dije hace un momento esta servirá como pegamento. Veamos una cosa interesante, como se puede ver dice “public interface” en lugar de “public class“.
Esto es porque, aunque suene redundante, es una interfaz y recordemos que éstas sólo sirven para ser sobrescritas más tarde. ¿Y en dónde las sobrescribiremos? en el código del servidor.
En este caso, como haremos una calculadora sólo declaramos la firma de 4 métodos: sumar, restar, multiplicar, y dividir.
Todos reciben dos parámetros flotantes, y todos devuelven un dato del mismo tipo.
Además, indicamos que el método puede lanzar una excepción de tipo RemoteException.
Ahora veamos el servidor. Este se encarga de exportar el objeto, sobrescribir funciones de la interfaz y escuchar peticiones del cliente.
Como observamos, ya hemos sobrescrito los métodos con el cuerpo real de la función. La anotación @Override no es necesaria, pero es una buena práctica indicar que estamos sobrescribiendo una función.
Finalmente escuchamos en localhost (cosa que no podemos cambiar) en el puerto definido en la constante PUERTO.
Para terminar con el código veamos ahora el cliente:
En el cliente imprimimos un menú, y dejamos que el usuario elija. Los try/catch son por si existe algún número mal formado, o por si dejan la cadena vacía, etcétera.
Como vemos, podemos llamar a los métodos remotos como si se trataran de métodos locales, simplemente usando a la interfaz.
El código no sirve para nada si no lo compilamos y probamos. Recuerda que puedes compilarlo desde un IDE, o desde la terminal como los macho alfa.
En fin, compilemos los 3 archivos…
Y el cliente en otra:
Nota: no sé por qué los acentos no se muestran correctamente, pero igual y no es una cosa que afecte al programa, sólo es molesto a la vista. Si lo deseas, simplemente cambia la ú por u. O ejecuta el programa desde un IDE.
La ventaja de esto es que todo el proceso se hace en el servidor, y si tenemos uno muy robusto pues qué mejor que dejar que él haga todas las operaciones que se llevarían más tiempo si las hiciéramos en una computadora normal.
Recuerda que en este ejemplo, la ip es la de mi pc. Si vas a conectar a otra computadora en una red, simplemente escribe su ip.
Lo mismo aplica para el puerto, si quieres escuchar en otro número recuerda cambiarlo tanto en el cliente como en el servidor.
Creo que poco a poco Java me va cayendo mejor.
La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…
Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…
El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…
El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…
En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…
Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…
Esta web usa cookies.
Ver comentarios
¿Y si quisiéramos tener el servidor y el cliente en proyectos separados que cambios serian necesarios?
Excelente trabajo, me gustaría verlo con base de datos