Introducción

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á.

Ejemplo de RMI

Interfaz remota

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.

Servidor

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.

Cliente

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.

Ejecución

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…

Ahora ejecutaré el servidor en una terminal:

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.

Conclusión

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.


Estoy disponible para trabajar en tu proyecto o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.
Si el post fue de tu agrado muestra tu apoyo compartiéndolo, suscribiéndote al blog, siguiéndome o realizando una donación.

Suscribir por correo

Ingresa tu correo y recibirás mis últimas entradas sobre programación, open source, bases de datos y todo lo relacionado con informática

Únete a otros 4,747 suscriptores


parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

1 Comentario

rafael · noviembre 28, 2021 a las 1:30 pm

Excelente trabajo, me gustaría verlo con base de datos

Deja un comentario

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada.

A %d blogueros les gusta esto: