Table of Contents

Trabalho com conexão TCP - Parte 2- Trabalho 3.

HTTP/TCP - Servidor Web Multithreads


O Protocolo de Controle de Transmissão - TCP

Neste trabalho iremos continuar explorando a implementação de uma aplicação rodando sobre TCP através da programação com sockets. Este trabalho tem a finalidade de trazer o conhecimento de programação e funcionamento básico do protocolo TCP, principalmente demonstrando os serviços que o TCP fornece para a camada de aplicação. Baseado no primeiro trabalho, mas agora transformando o anterior em um Servidor HTTP simplificado.

É obrigatório que este trabalho use o trabalho anterior como base.

Fluxo do trabalho:

  1. Use o trabalho anterior, servidor TCP multi thread.
    1. Não pode ser usado bibliotecas que manipulem o TCP, e sim usar o TCP diretamente através da criação e manipulação dos sockets.
  2. No servidor TCP (deve executar antes do cliente)
    1. Escolher um porta para receber as conexões (maior que 1024)
    2. Aceitar a conexão do cliente
    3. Criar uma thread com a conexão do cliente (para cada cliente). Na thread:
      1. Receber dados recebidos pelo cliente
      2. Tratar esses dados (requisição HTTP)
        1. Ex.: GET /pagina.html HTTP/1.0
  3. No Cliente TCP (deve executar depois do servidor)
    1. Usar o Browser de sua preferência
    2. Colocar o endereço da máquina e porta escolhida para o servidor
      1. URL : @ip do servidor:(Porta servidor)/pagina.html
    3. O Browser deve apresentar o arquivo requisitado na URL
      1. O Browser deve mostrar ao menos arquivos HTML + JPEG
      2. O Browser deve interpretar ERROS.
        1. Ex.: Resposta com 404.

O trabalho deve:

  1. Usar Sockets TCP Multi-thread
    1. Servidor
  2. No Servidor (Nesta Fase não é necessário implementar o cliente, pois será usado um Browser como cliente.)
    1. Receber requisições do Cliente
    2. Tratar corretamente as requisições HTMP e fazer o esperado.
  3. O Browser deve funcionar apresentando o arquivo requisitado na URL
    1. O Browser deve mostrar ao menos arquivos HTML + JPEG
    2. O Browser deve interpretar ERROS.
      1. Ex.: Resposta com 404.
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:
    1. O servidor tratando pelo menos duas (abas) paginas WEB simultaneamente.
  2. Transferência de Arquivo:
    1. O Browser deve mostrar arquivos HTML + JPEG
  3. Tratamento de Erro:
    1. O Browser deve interpretar ERROS.
      1. Ex.: Resposta com 404.
É importante quando explicar o código, explicar as alterações feitas em relação ao trabalho anterior.
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.
Veja o exemplo de uma página HTML simples:
<HTML> 
 <HEAD> 
  <TITLE>Título da página</TITLE> 
 </HEAD> 
     
 <BODY> 
  Conteúdo da página 
 </BODY> 
</HTML>

Requisições HTTP

Veja o exemplo de uma requisição HTTP simples:
GET /pagina.html HTTP/1.0
Host: www.UTFPR.edu.br
Accept: text/plain; text/html 
Accept-Language: en-gb 
Connection: Keep-Alive 
Host: localhost 
Referer: http://localhost/ch8/SendDetails.htm 
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98) 
Content-Length: 33 
Content-Type: application/x-www-form-urlencoded 
Accept-Encoding: gzip, deflate 

Resposta HTTP:

HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Mon, 3 Jan 2016 17:13:34 GMT
Content-Type: text/html
Last-Modified: Mon, 11 Jan 2016 17:24:42 GMT
Content-Length: 112
<html>
<head>
<title>Exemplo de resposta HTTP </title>
</head>
<body>
Acesso não autorizado!
</body>
</html>