Skip to content

JoseCarlosGZ/JAVA_Sockets

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Comunicación en red mediante sockets (TCP)

En este proyecto he programado una aplicación capaz de transmitir el stock de un almacén de aguacates entre dos equipos cliente y servidor conectados por red mediante sockets, haciendo uso del protocolo de comunicación TCP.

Figura 0. Socket
Figura 0. Socket.

Demostración de funcionamiento

Video demostrativo.


Desarrollo de la Aplicación Cliente

La aplicación Cliente se ha construido siguiendo el patrón de diseño vista-controlador y usando la librería Java Swing: la clase VistaCliente contiene lo relativo a la interfaz gráfica y el controlador de dicha interfaz gráfica lo hemos desarrollado en la clase HiloCliente. En la siguiente figura se muestra la interfaz gráfica desarrollada para el Cliente indicando los distintos controles:

Figura 1. Interfaz Aplicación Cliente.
Figura 1. Interfaz Aplicación Cliente.


(1). Cuadro de texto, cuya variable txtPuerto recibe el número de puerto al que se conectará el socket de la parte del Cliente.

(2). Cuadro de texto, cuya variable se txtDireccion recibe la dirección del servidor a la que se conectará el socket.

(3). Botón btnConexionCliente cuyo método ‘click’ creará una instancia de la clase HiloCliente donde creamos el hilo que controlará la creación del socket, conexión con el Servidor y flujos de Entrada/Salida.

Figura 2. Código del botón btnConexion.


A continuación, se muestra el constructor de la clase HiloCliente, en cuyo código se crea el socket de la parte del cliente mediante el constructor de la clase Socket, el puerto de conexión y la dirección del servidor introducidos por el usuario.

Figura 3. Constructor de la clase HiloCliente.


El método run() comienza a ejecutarse cuando se crea el hilo con la instrucción h.start(). Mirar figura 2. La parte más importante del método run() es la comunicación del hilo Cliente con el hilo Servidor mediante los flujos de entrada y salida.


Figura 4. Método run() del hilo de la aplicación Cliente.


(4). Etiqueta, cuya misión es la de informar al usuario del estado de la conexión Cliente-Servidor para brindar una experiencia de usuario agradable. Esta etiqueta tiene 2 estados:

  • Mientras el Cliente permanece sin conectar muestra el mensaje “conexión OFF” como aparece en la figura 1 del presente documento.
  • Cuando la conexión se ha establecido, el mensaje pasa a ser “conexión OK” en color verde. Mirar figura 5.

Figura 5. Conexión Cliente-Servidor exitosa
Figura 5. Conexión Cliente-Servidor exitosa.


(5). Botón que envía al controlador del servidor (vía socket) el contenido del cuadro de texto que le acompaña (nº6 de figura 1) para incrementar la variable stock que guarda del lado del servidor el número de aguacates. Cuando el servidor recibe dicha cadena la castea a número entero, se la suma a la variable ‘stock’ manda el resultado de vuelta al cliente que lo muestra en el cuadro de texto txtConsultar (nº10 de figura 1).

Figura 6. Código del botón btnInsertar (mirar nº5 de la figura 1).


(7). Ventana informativa que indica al usuario que para retirar aguacates del almacén debe introducir un número entero negativo en el cuadro de texto txtRetirar (nº6 de figura 1).

(8). Botón que envía al controlador del servidor (vía socket) el contenido del cuadro de texto que le acompaña (nº9 de figura 1) para disminuir la variable stock que guarda del lado del servidor el número de aguacates. Cuando el servidor recibe dicha cadena la castea a número entero, se la resta (es negativo) a la variable ‘stock’ que manda el resultado de vuelta al cliente y lo muestra en el cuadro de texto txtConsultar (nº10 de figura 1).

Figura 7. Código del botón btnRetirar.


(10). Cuadro de texto que permanece actualizado constantemente con el stock de aguacates de la variable ‘stock’ de la aplicación servidor. Su variable en el código es txtConsultar.

(11). Botón salir que cierra la ventana principal de la aplicación.

Figura 8. Código del botón btnSalir.


Desarrollo de la Aplicación Servidor

La aplicación servidor se ha construido siguiendo el patrón de diseño vista-controlador y usando la librería Java Swing: la clase VistaServidor contiene lo relativo a la interfaz y el controlador de dicha interfaz gráfica lo hemos desarrollado en la clase HiloServidor. En la siguiente figura se muestra la interfaz desarrollada indicando los distintos controles.


Figura 9. Interfaz gráfica de la aplicación Servidor.


(1). Cuadro de texto, cuya variable txtPuerto recibe el número de puerto al que se conectará el socket de la parte del Servidor.

(2). Cuadro de texto, cuya variable txtStock recibe el stock inicial del almacen introducido por el usuario al arrancar el servidor, según lo indicado en el enunciado de la tarea.

(3). Botón, cuya variable btnConexionServidor inicia el hilo del servidor que controlará la creación del socket, y flujos de entrada/salida para comunicarse con el Cliente.


Figura 10. Código del botón btnConexionServidor.


A continuación, se muestra el constructor de la clase HiloServidor, en cuyo código se crea el socket de la parte del servidor mediante el constructor de la clase Socket y el puerto de conexión introducido por el usuario.


Figura 11. Constructor de la clase HiloServidor.


El método run() comienza a ejecutarse cuando se crea el hilo con la instrucción h.start(). Mirar figura 9. La parte más importante del método run() es la comunicación del hilo Servidor con el hilo Cliente mediante los flujos de entrada y salida.


Figura 12. Método run() del hilo de la aplicación Servidor.


(4). Etiqueta, cuya misión es la de informar al usuario del estado de la conexión Cliente-Servidor para brindar una experiencia de usuario agradable. Esta etiqueta tiene 3 estados:

  • Mientras el Servidor permanece sin conectar muestra el mensaje “conexión OFF” como se muestra en la figura 8 del presente documento.
  • Cuando se ha creado el socket de la parte del servidor, pero aun no se ha conectado, es decir, la instrucción .accept() aún está en espera de la conexión del cliente. En este caso se muestra el mensaje “Esperando conexión Cliente” en color naranja. Mirar figura 13.
  • Cuando la conexión se ha establecido, el mensaje pasa a ser “conexión OK” en color verde. Mirar figura 14.


Figura 13. Servidor esperando conexión Cliente.



Figura 14. Conexión Servidor-Cliente exitosa.


(5). Cuadro de texto, que permanece actualizado constantemente con el stock de aguacates de la variable ‘stock’ de la aplicación servidor. Su variable en el código es txtConsultar.

(6). Botón salir que cierra la ventana principal de la aplicación.


Figura 15. Código del botón btnSalir.


About

Comunicación en red por medio de sockets usando protocolo TCP

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages