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:
https://github.com/victoralex911/redes-telecom/tree/master/PROTOCOLO
Se me hace un poco demasiado sencillo, poco documentado y no usa explícitamente UDP. Van 6 pts.
ResponderBorrar