Aluno | Matrícula |
---|---|
Thiago Luiz de Souza Gomes | 180028324 |
Wagner Martins da Cunha | 180029177 |
gcc
Para compilar todos os arquivos necessários, utilize o comando:
$ bash compile.sh
Este script criará os binários: server, client, server_app e client_app. Inicie os binários na ordem das etapas descritas a seguir (se usado o script de compilação, pular os comandos com gcc).
Crie um arquivo como teste.c
Exemplo:
#include <stdio.h>
#include <stdlib.h>
int main(){
printf("Hello World");
return 0;
}
Abra um terminal e dentro da pasta do projeto execute os seguintes comandos
gcc utils.c link_layer_client.c -o client -lrt
./client <int tamanho_PDU>
Resultado:
Obs: Nesta exemplo não foi colocado um tamanho especifíco para o PDU então setou 100 como padrão
Abra um terminal e dentro da pasta do projeto execute os seguintes comandos
gcc utils.c link_layer_server.c -o server -lrt
./server <int tamanho_PDU>
Resultado após a recepção da mensagem do cliente:
Obs: Nesta exemplo não foi colocado um tamanho especifíco para o PDU então setou 100 como padrão
Abra um terminal e dentro da pasta do projeto execute os seguintes comandos
gcc utils.c server_app.c -o server_app -lrt
./server_app
Resultado:
Abra um terminal e dentro da pasta do projeto execute os seguintes comandos
gcc utils.c client_app.c -o client_app -lrt
./client_app teste.c
Resultado:
Observe o terminal da terceira etapa:
A primeira versão deste projeto se trata de um simulação da camada de enlace ponto-a-ponto, simplex, não orientado à conexão, e stop and wait.
O projeto é composto de 2 camadas, a camada de enlace(N-1), e a camada de aplicação(N).
A camada de enlace é composta pelo cliente, que envia as mensagens e pelo servidor, que recebe as mensagens.
Cada aplicação tem sua respectiva camada de enlace (os dois estão no mesmo host, e a interface do enlace é usada pela aplicação). Para comunicação entre estes processos são usadas filas de mensagem (man mq_overview para o detalhamento).
O fluxo do projeto no momento pode ser descrito da seguinte forma:
Aplicação Cliente | Camada de enlace Cliente | Camada de enlace Server | Aplicação Server | |
---|---|---|---|---|
1 | Inicializada com DPU de tamanho N (escolhido pelo usuário); Abre uma fila de escrita e uma de leitura |
Inicializada com DPU de tamanho N(escolhido pelo usuário); Abre uma fila de escrita e uma de leitura |
||
2 | Espera por novas mensagens da fila | Espera por novas mensagens do socket | ||
3 | Lê um arquivo e envia para a fila; Espera mensagem da fila |
Inicializa e espera por novas mensagens da fila | ||
4 | Recebe mensagens da fila (uma por vez); Adiciona hash (simula crc); Adiciona erro aleatoriamente; Envia para o server; Espera confirmação. |
|||
5 | Recebe mensagem do socket; Remove hash; Verifica erros; Envia mensagem pra fila; Envia confirmação da mensagem pro cliente; Volta a esperar novas mensagens do cliente. |
|||
6 | Se confirmação positiva: envia próximo quadro; Se confirmação negativa: envia o quadro anterior novamente; Ao terminar de enviar mensagens, envia confirmação para a fila. |
Recebe mensagem da fila e escreve no terminal | ||
7 | Encerra | Volta para a linha 2 | Volta para a linha 2 | Volta a esperar mensagens da fila. |