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.
Requisitos Chave a Serem Demonstrados:
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.
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!