Trabalho redes 1

Disponível somente no TrabalhosFeitos
  • Páginas : 6 (1269 palavras )
  • Download(s) : 0
  • Publicado : 13 de novembro de 2012
Ler documento completo
Amostra do texto
PONTIFÍCIA UNIVERSIDADE CATÓLICA DE CAMPINAS CENTRO DE CIÊNCIAS EXATAS, AMBIENTAIS E TECNOLÓGICAS.

FACULDADE DE ENGENHARIA DE COMPUTAÇÃO

Laboratório de Redes de Computadores I Projeto 1

Prof. Edmar Rezende

Amauri Chagas Junior 08074999 Eduardo Mazzon Olivato 08093015

CAMPINAS 2012

Introdução
Neste projeto foi proposto pelo professor que implementássemos um servidor Web, com aversão 1.0 do protocolo HTTP. O servidor web é capaz de responder a requisição de um arquivo index.html e de arquivos com extensão .jpg, no caso do nosso projeto as imagens tem como nome lhama1, lhama2, lhama3 ou lhama4.

Descrição da atividade
O programa tem início com a inclusão das bibliotecas necessárias, feito como todas as outras atividades que desenvolvemos, sendo libraries.h e types.hdefinidas como mostram as figuras abaixo.

No procedimento pricipal do servidor são declaradas as variáveis necessárias para o controle do programa, declaração do sockets, numero da porta, tamanho, etc.. É atribuído em “num_port” o valor da porta que foi passada como parâmetro na execução do servidor.

Foi criado o socket do servidor da família TCP/IP (AF_INET) e específica que é do padrão TCP(SOCK_STREAM) e zero como ultimo parâmetro. A estrutura my_addr recebe as informações necessárias como a família de endereços e a porta para conexão, que foi convertido de bytes locais para bytes de rede com o comando htons. Se liga a todas as interfaces do computador (wlan, eth0, lo) através da atribuição com o comando INADDR_ANY.

Então o socket fica “escutando” por requisições de conexões.Se a conexão foi aceita cria um novo socket filho para tratar essa requisição via thread. Onde é capturado os valores do cliente, para que possa ser devolvido as requisições do mesmo. Na criação da thhread é então chamado o procedimento cliente que tratará tais requisições:

Na função cliente são declaradas as variáveis necessárias para sua utilização, como buffers, estruturas, variáveis do tipointeiro para controle dos tamanhos, etc..

É recebida então a mensagem do cliente e tratado o nome para identificar o nome do arquivo que o cliente (browser) requisitou.

Em seguida é aberto o arquivo e começa a se construir a string q será devolvida ao servidor com detalhes da conexão. O tamanho do arquivo é setado em um buffer temporário para q possa ser enviado ao browser posteriormente.Para montar os dados do arquivo no buffer é feito da seguinte maneira:

Onde tamHead é o tamanho do vetor com as informações dos detalhes da conexão. Em tamBuf é setado o tamanho total do vetor das informações previamente informadas mais o tamanho do arquivo a ser enviado. Para que não haja erros com a utilização do strcat com arquivos .jpg foi utilizado o comando memcpy, que permite fazer acopia de tudo que vai ser enviado em buf para buf_snd do tamanho tamHead. Em seguida enviado a resposta ao browser.

Compilação
Para compilar o servidor com threads e roda-lo em seguida, foi utilizado o seguintes comandos:

Logo em seguida foi requisitado o arquivo index.html através do comando (http://127.0.0.1:5000/index.html) no browser, resultando na seguinte resultado

(Nota: No browser,no caso Google Chrome, o próprio browser omite o http://)

Após foi feito uma requisição de um .jpg mas passando no browser o comando (http://localhost:5000/lhama1.jpg) Resultando as seguintes telas:

(Nota: Lixo na saída do servidor, onde não foi conseguido encontrar o erro) Para todos os arquivos .jpg tivemos observa-se lixo impresso no servidor. Nas seta detalhadas nos prints, observa-sea chamada do host, o tipo de conexão, no caso HTTP 1.0, a requisição para o ícone favicon.ico entre outras informações. Abaixo, estão os prints com a chamada dos quatro .jpg que testamos. Cada um com uma chamada diferente, um atraves do localhost, outro pelo ip local (127.0.0.1) e o outro no ip da rede eth0 como mostra o print no final dos testes.

Código-fonte
-

Types.h

#include...
tracking img