Skip to content

About

Exercicio programa da disciplina de redes de computadores da USP

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

10 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

USP

EP - Jogo da Forca Distribuído

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.

Descrição

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.

Funcionalidades

  • 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

Arquitetura

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.

Estrutura do Projeto

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

Dependências

  • 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.

Compilação

O projeto utiliza um Makefile. Para compilar os dois binários:

make

Para compilar apenas o servidor ou apenas o cliente:

make bin/server
make bin/client

Para remover os binários gerados:

make clean

Execução

Em um terminal, inicie o servidor:

./bin/server 

Em outros terminais, conecte um ou mais clientes:

./bin/client

Protocolo de Comunicação

As mensagens trafegam sobre TCP no seguinte formato:

+----------+-----------------+----------------+
| 1 byte   | 2 bytes         | N bytes        |
| tipo     | tamanho (N)     | payload        |
+----------+-----------------+----------------+
  • O campo tipo identifica o tipo da mensagem (ver protocol.hpp).
  • O campo tamanho é um uint16_t em network byte order (big-endian).
  • O campo payload contém os dados da mensagem, sem terminador nulo.

Os tipos de mensagem implementados são: LOGIN, GUESS, STATE, END_GAME e LOGOUT.

Autor

  • Joao Pedro Becer

About

Exercicio programa da disciplina de redes de computadores da USP

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages