Skip to content
Snippets Groups Projects
Commit edafb608 authored by Victor Perszel's avatar Victor Perszel :top:
Browse files

LEIAME adicionado

parent 6d12e562
No related branches found
No related tags found
No related merge requests found
------------------------------------------------------
------- Eduardo Maia Machado - GRR20142062 -----------
------- Victor Luis Perszel - GRR20144615 ------------
------------------------------------------------------
Este é o relatório referente ao trabalho 1 da disciplina de Redes de Computadores I, implementado pelos alunos Eduardo Machado e Victor Perszel.
Os arquivos e diretórios existentes na pasta raiz do trabalho são:
- include: diretório contendo as bibliotecas do programa, são elas:
- connectionRawSocket.h: contém todos os .h necessários para a compilação dos arquivos e a função do arquivo connectionRawSocket.cpp;
- messages.h: biblioteca para o messages.cpp, contendo a class Message, que contém as funções de envio / recebimento do CD, LS, PUT, GET e DATA;
- submessages.h: biblioteca para o submessages.cpp, contém a class SubMessage, com o protocolo das submensagens conforme especificação (Delimitador de Início, Tamanho, Sequência, etc...) e funções que setam / retornam o valor de cada campo;
- miniShell.h: biblioteca para o miniShell.cpp, detalhado mais abaixo.
- lib: diretório contendo os arquivos .a do programa, gerados apenas após o Makefile, são eles: connectionRawSocket.a, messages.a, submessages.a e miniShell.a;
- obj: diretório contendo os arquivos objeto (.o) do programa, gerados apenas após o Makefile, são eles: connectionRawSocket.o, messages.o, submessages.o e miniShell.o;
- src: diretório contendo o código fonte do programa em si. São arquivos .cpp. A linguagem utilizada para o trabalho foi C++, pois assim podemos trabalhar com orientação a objetos. Há quatro arquivos nesse diretório:
- connectionRawSocket.cpp: arquivo fornecido pelo professor, para a implementação do socket;
- submessages.cpp: implementa as funções das submensagem, tais como setar / retornar delimitador de início, tamanho, sequência, tipo, dados e paridade, além de funções que transformam o objeto em uma string, e vice-versa;
- messages.cpp: contém as funções que fazem tanto as requisições (client) quanto o recebimento / resposta (server) dos comandos CD, LS, PUT e GET;
- miniShell.cpp: controla o shell local, realizado as funções de CD e LS local;
- main.cpp: abre o socket, verifica se é o server ou client e chama as funções corretamente conforme as mensagens vão sendo enviadas / recebidas;
- Makefile: utilizado para compilação do programa. Use “make” para compilar e “make clean” para limpar os arquivos gerados com a compilação;
- connection: o executável do programa.
O executável é o mesmo tanto para o cliente quanto para o servidor. Para executar o programa deve-se digitar “sudo ./connection client” para iniciar como cliente e “sudo ./connection server” para iniciar como servidor.
O cliente e o servidor devem estar conectados com um cabo cross-over.
Inicialmente foi implementado o processo de Janelas Deslizantes, porém, havia sido feito o processo de Volta-N, não Repetição Seletiva (como especificado). O fato de termos que mudar a janela, junto ao fato de o próprio volta-n estar trazendo problemas e o prazo se encurtando, fez com que nós optassemos pela implementação de para-e-espera. Por isso, o código é uma adaptação do que deveria ser uma janela deslizante.
A paridade (implementada em submessages.cpp) foi implementada verticalmente. E sua função de checagem (checkParity) a recalcula e compara com a anterior.
O timeout das mensagens é implentado com a struct pollfd (#include <poll.h>) e verifica se existem mensagens recebidas a cada 500ms. Se forem recebidas 10 mensagens sem sucesso (lixo), as mensagens sem retorno serão reenviadas.
Quando o client manda um CDR (código para CD Remoto), pode obter de retorno um “OK” (que certifica que o diretório foi modificado), um “NACK” que vai reenviar o pedido ou um “ERRO” que pode ser de (0) Diretório Inexistente ou de (1) Sem Permissão para acessar o Diretório.
Caso mande um LSR (código para LS Remoto), o erro possível é de Opção inválida (caso não seja ., -l, -a ou -la. Volta e meia um LSR acaba por crashar (quebrar) o programa. Não se sabe o motivo desse acontecimento, embora ele seja levemente raro.
Bugs conhecidos:
→ “CD ..” pode, raramente, voltar de diretório mais de uma vez.
→ LS Remoto pode crashar o programa ocasionalmente.
→ O PUT não funciona caso o arquivo não seja do diretório onde o programa foi inicializado.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment