User Tools

Site Tools


cursos:icsr30:trab1

Trabalho com conexão TCP - Trabalho 2

Implementação de Cliente/Servidor TCP Multithread com Transferência de Arquivos e Chat

Objetivo do Projeto:

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:
  1. Linguagem de Programação: Livre escolha do aluno (ex: Python, Java, C/C++, etc.).
  2. Uso de Sockets: É obrigatório utilizar a API de sockets diretamente para toda a comunicação TCP.
  3. Não é permitido o uso de bibliotecas que abstraiam ou mascarem a manipulação direta de sockets e conexões TCP.
  4. Sugere-se iniciar com um exemplo simples “Hello World” cliente/servidor TCP multithread para familiarização antes de implementar as funcionalidades completas.

Requisitos do Servidor TCP (Multithread):

  1. Inicialização: Deve ser executado antes de qualquer cliente.
  2. Porta de Escuta: Deve aguardar conexões em uma porta TCP específica (escolhida pelo aluno, maior que 1024).
  3. Gerenciamento de Conexões:
    1. Aceitar conexões TCP de múltiplos clientes.
    2. Para cada nova conexão aceita, o servidor deve criar uma thread dedicada para lidar exclusivamente com a comunicação daquele cliente.

Funcionalidades Dentro de Cada Thread do Servidor:

A thread dedicada a um cliente deve:

  1. Loop de Requisições: Aguardar e processar requisições enviadas pelo cliente conectado até receber a requisição “Sair”.
  2. Tratamento de Requisições: Implementar a lógica para as seguintes requisições (o formato exato faz parte do protocolo a ser definido pelo aluno):
    1. Requisição “Sair”:
      1. Fechar a conexão TCP com aquele cliente.
      2. Encerrar a thread correspondente de forma limpa.
    2. Requisição “Arquivo [Nome_Arquivo.ext]”:
      1. Verificar se o arquivo [Nome_Arquivo.ext] existe no servidor.
      2. Se o arquivo existir:
        1. Calcular o hash SHA (ex: SHA-256) do conteúdo completo do arquivo. (O aluno deve pesquisar como implementar/usar bibliotecas padrão para cálculo de SHA).
        2. Enviar o arquivo para o cliente, seguindo o protocolo de aplicação definido (ver seção “Protocolo de Aplicação”).
        3. A transferência deve suportar arquivos grandes (> 10 MB).
      3. Se o arquivo não existir:
        1. Enviar uma mensagem de erro/status apropriada para o cliente, conforme definido no protocolo.
    3. Requisição “Chat [Mensagem]” (Recebida do Cliente):
      1. Exibir a [Mensagem] recebida na console do servidor (indicando de qual cliente veio, se possível).
    4. Envio de Mensagens de Chat (Iniciadas pelo Servidor):
      1. Permitir que texto digitado na console principal do servidor seja enviado como mensagem de chat para todos os clientes conectados (ou implementar um mecanismo para direcionar a um cliente específico, se desejado). Nota: Esta parte requer atenção à comunicação entre a thread principal/console e as threads dos clientes.

Requisitos do Cliente TCP:

  1. Inicialização: Deve ser executado após o servidor estar ativo.
  2. Conexão:
    1. Permitir ao usuário especificar o endereço IP e a porta do servidor TCP.
    2. Estabelecer uma conexão TCP com o servidor.
  3. Interface do Usuário:
    1. Oferecer um meio para o usuário escolher e enviar as seguintes requisições para o servidor: “Sair”, “Arquivo [Nome_Arquivo.ext]”, “Chat [Mensagem]”.
  4. Processamento de Respostas do Servidor:
    1. Resposta a “Sair”: Após enviar “Sair”, fechar a conexão do lado do cliente e encerrar o programa.
    2. Resposta a “Arquivo”:
      1. Receber os dados do arquivo (metadados e conteúdo) conforme a ordem definida no protocolo de aplicação.
      2. Salvar o conteúdo recebido em um arquivo local.
      3. Após receber todo o conteúdo, calcular o hash SHA do arquivo recebido.
      4. Verificar a integridade: Comparar o hash calculado com o hash recebido do servidor. Informar ao usuário se o arquivo foi recebido corretamente ou se houve corrupção.
      5. Deve ser capaz de receber e salvar arquivos grandes (> 10 MB).
    3. Resposta a “Chat” (Mensagens recebidas do Servidor):
      1. Exibir as mensagens de chat recebidas do servidor na tela do cliente.

Definição do Protocolo de Aplicação (Tarefa do Aluno):

O aluno deve definir e documentar um protocolo de aplicação simples sobre TCP para gerenciar a comunicação. Este protocolo deve especificar claramente:

  1. Formato das Requisições: Como o cliente envia “Sair”, “Arquivo [Nome]”, “Chat [Msg]”.
  2. Formato das Respostas/Transferência de Arquivo: A ordem e o formato para enviar:
    1. Status da operação (ex: OK, ERRO_ARQUIVO_NAO_ENCONTRADO).
    2. Metadados do arquivo (Nome do arquivo, Tamanho total).
    3. Hash SHA do arquivo completo.
    4. Os dados do arquivo (como serão segmentados/enviados sobre o stream TCP).
  3. Formato das Mensagens de Chat.
Roteiro para Vídeo de Apresentação
  1. No inicio do vídeo deve mostrar todos os itens obrigatórios funcionando no programa.
  2. 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:

  1. Multithreading: O servidor tratando pelo menos dois clientes simultaneamente.
  2. Funcionalidades: Demonstração bem-sucedida das requisições “Sair”, “Chat” (bidirecional) e “Arquivo”.
  3. Transferência de Arquivo Grande: Transferência e salvamento correto de um arquivo > 10 MB.
  4. Verificação de Integridade: Demonstração da verificação por Hash SHA no cliente, indicando sucesso ou falha.
  5. Tratamento de Erro: Demonstração do tratamento de erro (ex: Arquivo não encontrado).
  6. Robustez: O sistema deve lidar corretamente com as interações descritas.
O aluno deve:
  1. colocar no Classroom um arquivo .ZIP com todo o código,
  2. 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!
  • O aluno deve usar as chamadas TCP e não pode usar bibliotecas que mascarem o trabalho.
cursos/icsr30/trab1.txt · Last modified: 2025/07/10 20:50 by fonseca