martes, 12 de febrero de 2013

[REDES DE TELECOMUNICACIONES] Protocolo

Para esta tarea se encargó implementar un protocolo sencillo, para el cual realicé un par de programas (cliente y servidor) que consisten en un minijuego en el cual el servidor genera un número aleatorio para un cliente. El cliente tiene que adivinar el número, si el cliente se equivoca demaciadas veces el servidor cerrará la conexión con ese cliente, si gana varias veces, el servidor aumentará la dificultad, si el cliente envía una "P" en lugar de un número,  el servidor enviara su estatus en el juego.

Al iniciar el servidor se coloca la ip local de la máquina donde se ejecuta,  al iniciar un cliente se indica la dirección del servidor. El servidor acepta múltiples clientes y para cada uno se realiza un juego diferente.

Para ejecutar el cliente se realiza de la siguiente manera:

python server.py <dirección ip>

Un ejemplo es:


Una vez ejecutando, el servidor espera a que un cliente entre, para ejecutar el cliente:

python client <dirección ip del servidor>

El ejemplo:


Cuando se ejecuta el cliente, el servidor genera los números aleatorios y espera a que el cliente responda.

En el servidor:

En el cliente:

Al introducir el valor correcto:


Y del lado del servidor:


Al contestar incorrectamente:


Y del lado del servidor:


Cuando el cliente envia una "P", recibe su estado:


En el lado del servidor:


Todo esto funciona de la siguiente manera:
  • Cuando el cliente inicia una conexión nueva, el servidor inicia una instancia del juego en un thread.
  • El servidor genera un número.
  • El cliente envia un número.
  • El servidor lo recibe en su thread que tiene como parametro la conexión.
  • El servidor verifica si se trata del número.
  • Si el número es correcto, el servidor enviará una "Y" y genera un nuevo número.
  • Si el número es incorrecto, el servidor  enviara una "N".
  • El cliente recibe el dato.
  • Si el dato es "Y" el cliente da un tiempo de espera y luego pregunta por un nuevo número.
  • Si el dato es "N" simpelmente esperará por otro número.
  • Por cada "Y" se agrega un acierto al contador.
  • Por cada "N" se agrega un error al contador.
  • Si el cliente envia una "P" esperará recibir dos datos; numero de errores y número de aciertos.
  • El servidor al recibir una "P" envia datos de error y aciertos formateados en un solo paquete.
  • El cliente al recibir una "P" desempaqueta un par de datos; número de errores y número de aciertos.
Y así continua hasta que el cliente pierda, se salga o el servidor se cierre.

El código del servidor:
El código del cliente:
El proyecto en github:
https://github.com/victoralex911/redes-telecom/tree/master/PROTOCOLO

1 comentario:

  1. Se me hace un poco demasiado sencillo, poco documentado y no usa explícitamente UDP. Van 6 pts.

    ResponderEliminar