Trabalho prático da disciplina de Redes de Computadores. Consiste em uma aplicação distribuída cliente-servidor que implementa o jogo da forca em modo multiplayer via terminal, utilizando comunicação por sockets TCP.
O servidor mantém o estado central do jogo (palavra secreta, letras já tentadas, número de erros, turno atual) e coordena múltiplos clientes conectados simultaneamente. Cada cliente se conecta, informa um nome, seleciona o IP do servidor(local host ou próprio), seleciona porta e passa a receber o estado atualizado do tabuleiro a cada rodada. O jogo avança em turnos: apenas o jogador da vez pode enviar um chute, e o resultado é transmitido a todos os clientes conectados.
- Suporte a múltiplos clientes simultâneos no mesmo servidor
- Coordenação de turnos entre jogadores
- Estado do jogo sincronizado entre todos os clientes
- Desenho ASCII da forca atualizado a cada erro
- Encerramento automático ao esgotar tentativas ou descobrir a palavra
O projeto segue o modelo cliente-servidor com comunicação via TCP:
- O servidor é responsável por manter o estado do jogo e validar os chutes.
- Cada cliente conectado gera uma thread dedicada no servidor.
- O envio do estado do jogo é feito por broadcast, ou seja, a mesma mensagem é enviada a todos os clientes conectados.
- A comunicação utiliza um protocolo próprio de mensagens com cabeçalho de tipo e tamanho.
EP_Redes/
├── bin/ # Binários gerados pela compilação
├── include/ # Arquivos de cabeçalho (.hpp)
│ ├── client.hpp
│ ├── forca.hpp
│ ├── protocol.hpp
│ ├── server.hpp
│ └── utils.hpp
├── src/ # Código-fonte (.cpp)
│ ├── client.cpp
│ ├── client_main.cpp
│ ├── forca.cpp
│ ├── protocol.cpp
│ ├── server.cpp
│ ├── server_main.cpp
│ └── utils.cpp
├── Makefile
├── README.md
└── boneco.txt
- Compilador C++ com suporte a C++17 (g++ ou clang++)
- GNU Make
- Sistema operacional POSIX (Linux ou macOS)
Nenhuma biblioteca externa é necessária. Toda a comunicação é feita utilizando as APIs de socket da biblioteca padrão do sistema.
O projeto utiliza um Makefile. Para compilar os dois binários:
makePara compilar apenas o servidor ou apenas o cliente:
make bin/server
make bin/clientPara remover os binários gerados:
make cleanEm um terminal, inicie o servidor:
./bin/server Em outros terminais, conecte um ou mais clientes:
./bin/clientAs mensagens trafegam sobre TCP no seguinte formato:
+----------+-----------------+----------------+
| 1 byte | 2 bytes | N bytes |
| tipo | tamanho (N) | payload |
+----------+-----------------+----------------+
- O campo
tipoidentifica o tipo da mensagem (verprotocol.hpp). - O campo
tamanhoé umuint16_tem network byte order (big-endian). - O campo
payloadcontém os dados da mensagem, sem terminador nulo.
Os tipos de mensagem implementados são: LOGIN, GUESS,
STATE, END_GAME e LOGOUT.
- Joao Pedro Becer