Desenvolver uma aplicação cliente-servidor utilizando o protocolo TCP e programação de sockets. O servidor deve ser capaz de lidar com múltiplos clientes concorrentemente (usando threads) e oferecer funcionalidades como transferência de arquivos grandes com verificação de integridade (SHA) e um chat simples.
Requisitos Gerais:
Linguagem de Programação: Livre escolha do aluno (ex: Python, Java, C/C++, etc.).
Uso de Sockets: É obrigatório utilizar a
API de sockets diretamente para toda a comunicação TCP.
Não é permitido o uso de bibliotecas que abstraiam ou mascarem a manipulação direta de sockets e conexões TCP.
Sugere-se iniciar com um exemplo simples “Hello World” cliente/servidor TCP multithread para familiarização antes de implementar as funcionalidades completas.
O aluno deve definir e documentar um protocolo de aplicação simples sobre TCP para gerenciar a comunicação. Este protocolo deve especificar claramente:
Formato das Requisições: Como o cliente envia “Sair”, “Arquivo [Nome]”, “Chat [Msg]”.
Formato das Respostas/Transferência de Arquivo: A ordem e o formato para enviar:
Status da operação (ex: OK, ERRO_ARQUIVO_NAO_ENCONTRADO).
Metadados do arquivo (Nome do arquivo, Tamanho total).
Hash SHA do arquivo completo.
Os dados do arquivo (como serão segmentados/enviados sobre o stream TCP).
Formato das Mensagens de Chat.
Roteiro para Vídeo de Apresentação
No inicio do vídeo deve mostrar todos os itens obrigatórios funcionando no programa.
Na segunda parte do vídeo deve ser explicado cada item como foi implementado no código (Comentando o código).
Itens Obrigatórios a Demonstrar e Explicar no código:
Multithreading: O servidor tratando pelo menos dois clientes simultaneamente.
Funcionalidades: Demonstração bem-sucedida das requisições “Sair”, “Chat” (bidirecional) e “Arquivo”.
Transferência de Arquivo Grande: Transferência e salvamento correto de um arquivo > 10
MB.
Verificação de Integridade: Demonstração da verificação por Hash SHA no cliente, indicando sucesso ou falha.
Tratamento de Erro: Demonstração do tratamento de erro (ex: Arquivo não encontrado).
Robustez: O sistema deve lidar corretamente com as interações descritas.
O aluno deve:
colocar no Classroom um arquivo .ZIP com todo o código,
enviar como mensagem (Comentários particulares) o link do vídeo
Lembre-se: O vídeo deve ser uma demonstração prática, complementada por explicações claras sobre o funcionamento e as decisões de projeto.
O vídeo deve ser anexado como link nos comentários da entrega dentro da atividade do classroom.
NÃO deve ser enviado o arquivo do video!