Está en la página 1de 6

Modelo Cliente-Servidor

El modelo cliente-servidor (client-server), describe el proceso de interacción entre la


computadora local (el cliente) y la remota (el servidor). El cliente le hace peticiones (requests,
solicitudes, requerimientos) al servidor, el cual procesa dicho requerimiento y retorna los
resultados al cliente apropiado. Por lo general, los clientes y los servidores se comunican entre sí
a través de una red, pero también pueden residir ambos en un mismo sistema (el mismo hardware).

Fig 1. Modelo cliente –servidor.


Siguen este modelo de cliente/servidor servicios como el intercambio de e-mails, el acceso a
webs, el acceso a bases de datos, y muchos otros protocolos de internet se basan en esta idea
(HTTP, SMTP, Telnet, DNS), etc.

Características del modelo cliente/servidor


La máquina que sirve como servidor (host) es la que tiene en ejecución programas de servidor
que contestan los requerimientos de los clientes. Por lo general los clientes inician la sesión de
comunicación, mientras que los servidores esperan la llegada de solicitudes.
La interacción entre cliente y servidor es generalmente representada empleando diagramas de
secuencia (estandarizados en UML).
En contraste, la arquitectura P2P (peer-to-peer), cada host o instancia de programa puede ser
simultáneamente tanto cliente como servidor, y cada uno tener sus propias responsabilidades y
estado.

Ventajas y desventajas del modelo cliente/servidor


Ventajas:
* Centralización del control de los recursos, datos y accesos.
* Facilidad de mantenimiento y actualización del lado del servidor: Esto es porque el lado del
servidor se puede mantener o actualizar fácilmente. Por ejemplo, una actualización se aplica a un
único servidor, pero los beneficios los obtienen múltiples clientes generalmente sin necesidad de
que éstos actualicen nada.
* Toda la información es almacenada en el lado del servidor, que suele tener mayor seguridad que
los clientes.
* Hay muchas herramientas cliente-servidor probado, seguro y amigable para usar.

Desventajas:
* Si el número de clientes simultáneos es elevado, el servidor puede saturarse. Esto sucede con
menor frecuencia en las redes P2P.
* Frente a fallas del lado del servidor, el servicio queda paralizado para los clientes. Algo que no
sucede en una red P2P.
Los sockets son básicamente formas en las que podemos interconectar 2 (o más) programas
mediante el uso de la internet. En java se utilizan para poder crear conexiones utilizando
básicamente una IP/hostname y un puerto para establecer la conexión.
Ambos programas (servidor y cliente) no necesitan estar programados en Java, es posible
programarlos en lenguajes de programación diferentes, o inclusive programar un servidor en java
y utilizar un cliente ya existente que pueda conectarse a un puerto especificado.

El cliente debe de conocer tanto el puerto a utilizar como la IP o dominio del servidor, mientras
el servidor solo debe conocer el puerto de conexión

1. FUNCION ENVIA DATOS

Esta función está diseñada para recibir como parámetro aun dato de tipo String, cada vez que se
lo invoque en el programa “Client” inmediatamente este obtener por medio de BufferedReader
un cadena y mediante el DatagramPacke se va a empaquetar el mensaje para posteriormente ser
enviado atreves del función send( ).

Ilustración 1 Función en el programa cliente.

2. FUNCION RECIVE DATOS


El objetivo de esta función es recibir determinada cadena de caracteres que contantemente
estarán enviando el programa “Servidor” puesto que dicho programa será el encargado de
mandar a visualizar las distintas adivinanzas en el programa “cliente”, esta función será de tipo
String y cada que sea invocada esta se reemplazara en la cadena de caracteres enviada por el
servidor.
Ilustración 2 Función en el programa cliente.

3. ARREGLO TIPO STRING DE RESPUESTAS


Aquí se declara el arreglo de tipo String con el cual el programa “client” va a poder comparar
los resultados ingresados por teclado ya que este arreglo está compuesto pon 100 cadenas de
caracteres pero también tiene la posibilidad de componerse por n-esimas espacios, las cuales son
las diferentes respuestas de las adivinanzas que va a estar lanzando el servidor.

Ilustración 3 Arreglo tipo String de respuestas.

4. CONDICIÓN IF-ELSE
En esta parte del código situado en el programa “Client” impone una condición que puede ser
verdadera o falsa. Para que el programa te permita visualizar la adivinanza el usuario deberá
ingresar la palabra clave “cero” caso contrario el programa esta diseñado para que mediante un
mensaje que digo “gracias por intentarlo”.
Una vez ingreses la palabra clave, el programa “cliente” enviara tu mensaje de que si va a jugar
y rápidamente el programa “servidor” te enviara una adivinanza, la cual está diseñada para fallar
solo cuatro veces. Si llegas a fallar cuatro veces el programa “cliente” te va a notificar que
perdiste, después te va a pedir ingresar nuevamente la palabra clase “cero” para una nueva
adivinanza.
Así estas líneas de código gracias a la condición do-while se van a convertir en un ciclo infinito,
a menos de que tú ingrese la palabra clave “fin” ya que esta sirve para que el do-while cambie
de estado falso a verdadero, teniendo como resultado que el programa “cliente” termine.
Ilustración 4 Ingreso de posibles respuestas a la adivinanza.

5. ARREGLO TIPOSTRING DE ADIVINAZAS


Este arreglo tipo String esta declara en el programa “Serve” el cual esta compuesto por las
variadas adivinanzas, dichas adivinanzas serán enviadas por el servidor al cliente simpe y
cuando se reviva a la palabra clave cero ya que solo si el servidor tiene permiso de enviarla.

Ilustración 5 Arreglo tipo String de adivinanzas.


6. CONDICIÓN IF QUE ENVÍA ADIVINANZA.
En esta condición If se compara la palabra clave “cero” enviada por el usuario, para que el
programa “server” puede mandar la adivinanza debe cumplir mediante la función
“equalsIgnoreCase( )” que efectivamente son iguales. Siendo verdadera la condición el
programa “server” tiene luz verde para enviar al usuario las n-esimas adivinanzas.

7. CONDICIÓN IF QUE ENVÍA MENSAJE DE “GANO”.


En estas líneas de código se está comparando los mensajes (las respuestas que mandar el
programa “client”) recibidos con las respuestas almacenadas en el arreglo de tipo String ya
mencionado anteriormente.

8. FUNCION ENVIA MENSAJES

Esta función está diseñada para recibir como parámetro aun dato de tipo String, cada vez que se
lo invoque en el programa “server” inmediatamente este obtener por medio de decirnacion de
valor un cadena y mediante el DatagramPacke se va a empaquetar el mensaje para posteriormente
ser enviado atreves del función send( ).

Conclusiones:
1. Este programa al ser basado en el protocolo UDP está diseñado para que sean
comunicación individuales, las cuales tendrán el servido con el un solo cliente, es decir,
si en algún punto el cliente 1 llegase a ganar la adivinanza, no va a influir con los
intento de las demás clientes.
2. Los clientes al estar en una comunicación tipo privada con el servidor, van a tener la
posibilidad de ganar si acierta en los cuatro intentos, independientemente de si los otros
clientes ya ganaron.
3. El protocolo UDP es bastante eficiente pero al ser una comunicación privada con los
clientes limita mucho sus aplicaciones, puesto que se necesita una comunicación que
englobe a los n-esimos clientes con el servidor, es decir, la respuesta del servidor
debería ser para todos los clientes.
Recomendaciones:
1. Se recomienda usar funciones ya que esto permitirá reciclar líneas de código que sean
destinadas a usarse una y otra vez.
2. Tomar en cuenta el protocolo TCP ya que este va a englobar una comunicación de
servidor a todos los clientes.
3. Entender como funciona la recepción de mensajes del servidor al cliente ya que se
pueden cruzar entre la recepción del mensajes de cliente al servidor y así tener como
consecuencia que no lleguen los mensajes a tiempo (pueden retrasarse o adelantarse del
lugar donde se los necesita).