EACHare é um sistema de compartilhamento de arquivos peer-to-peer implementado em Python. O sistema utiliza relógios lógicos, gerenciamento robusto de peers, transferência de arquivos com base64 e chunks, e interface thread-safe.
- Gerenciamento de Peers: Sistema robusto de descoberta e manutenção de peers com status online/offline
- Relógios Lógicos: Implementação de relógios lógicos de Lamport para ordenação de eventos
- Transferência de Arquivos:
- Download paralelo com chunks
- Codificação/decodificação base64
- Suporte a múltiplos peers simultâneos
- Thread Safety: Todas as operações de I/O e print são thread-safe
- Interface de Usuário: Menu interativo para listagem, busca e download de arquivos
- Python 3.10.12 ou superior
eachare_app/
├── __init__.py
├── config.py # Configuração do diretório compartilhado
├── connection.py # Gerenciamento de conexões TCP e protocolo
├── main.py # Interface principal e lógica de download
├── peer.py # Classe Peer com thread safety
├── peer_manager.py # Gerenciamento da tabela de peers
└── utils.py # Utilitários thread-safe (print_with_lock)
No diretório ep-EACHare, execute o seguinte comando:
./eachare <endereco>:<porta> <vizinhos.txt> <diretorio_compartilhado>./eachare 127.0.0.1:8080 vizinhos8080.txt shared8080Se necessário, configure o arquivo eachare como executável:
chmod +x eachare- Listar peers: Visualiza todos os peers conhecidos e seus status
- Obter peers: Solicita lista de peers de outros nós da rede
- Listar arquivos locais: Mostra arquivos no diretório compartilhado
- Buscar arquivos: Procura arquivos disponíveis na rede
- Download de arquivos: Download paralelo com múltiplos peers
- Estatísticas: Visualiza estatísticas de download (tempo, throughput)
- Configurar chunk size: Ajusta o tamanho dos chunks para download
HELLO: Saudação entre peersGET_PEERS: Solicita lista de peersPEER_LIST: Resposta com lista de peersLS: Lista arquivos disponíveisLS_LIST: Resposta com lista de arquivosDL: Solicita download de chunk específicoFILE: Resposta com chunk do arquivoBYE: Notifica desconexão
O sistema implementa thread safety em todas as operações críticas:
- Prints utilizando
print_with_lock()global - Acesso a relógios lógicos protegido por locks
- Operações em peers protegidas por locks individuais
- Lista de resultados de arquivo protegida por locks