Aluno: Leonardo Bueno Nogueira Kruger GRR:20180130 Relatorio relativo ao trabalho de redes, implementação de um editor de texto online.
O trabalho está dividido nos seguintes arquivos client.c, server.c, communication.c, client.h, server.h, communication.h
Em um terminal:
root@kruger-Ubuntu:/home/kruger/Clones/redes-1# make
gcc client.c commands.c communication.c -o client -Wall -Wextra -pedantic -std=c99
gcc server.c commands.c communication.c -o server -Wall -Wextra -pedantic -std=c99
root@kruger-Ubuntu:/home/kruger/Clones/redes-1# ./server
Em outro terminal:
root@kruger-Ubuntu:/home/kruger/Clones/redes-1# ./client
escreva um comando
cd ..
| Sucesso
Comandos:
1. cd <nome_dir> – efetua a troca de diretório no servidor
2. lcd <nome-dir> – efetua a troca de diretório no cliente
3. ls – lista os arquivos do diretório corrente do servidor
4. lls – lista os arquivos do diretório corrente do cliente
5. ver <nome_arq> - mostra o conteúdo do arquivo texto do servidor na tela do cliente. As
linhas do arquivo devem ser numeradas para mostrar na tela.
6. linha <numero_linha> <nome_arq> - mostra a linha <numero_linha> do arquivo
<nome_arq> que esta no servidor na tela do cliente.
7. linhas <numero_linha_inicial> <numero_linha_final> <nome_arq> - mostra as linhas
entre a <numero_linha_inicial> e <numero_linha_final> do arquivo <nome_arq> que
esta no servidor na tela do cliente.
8. edit <numero_linha> <nome_arq> “<NOVO_TEXTO>” – troca a linha <numero_linha> do
arquivo <nome_arq> que esta no servidor pelo texto <NOVO_TEXTO> que deve ser
digitado entre aspas. As aspas são delimitadores do texto e não devem ser escritas no
arquivo.
Algumas definições utilizadas no trabalho conforme especificações:
// tipo da mensagem
typedef enum {
CDT = 0 // 0000 0
, LST // 0001 1
, VERT // 0010 2
, LINHAT // 0011 3
, LINHAST // 0100 4
, EDITT // 0101 5
, NOTSET // 0110 6
, NOTSET2 // 0111 7
, ACK // 1000 8
, NACK // 1001 9
, LIF // 1010 10
, CONTLS // 1011 11
, CONTARQ // 1100 12
, EOT // 1101 13
, NOTSET3 // 1110 14
, ERROR // 1111 15
} MSG_TYPE;
#define MARK 126 // 01111110 Marcador de início
// Remetente e destinatario
typedef struct Sender{
unsigned char dest : 2;
unsigned char orig : 2;
} Sender;
// Cabeçalho para o protocol kermit
typedef struct Package_header
{
unsigned char mark : 8; // 01111110
unsigned char dest : 2;
unsigned char orig : 2;
unsigned char size : 4;
unsigned char seq : 4;
unsigned char type : 4;
unsigned char data[15];
unsigned char par;
} Package_header;
void send_msgs(char *data, int type, int orig, int dest);
Envia uma mensagem que não necessita de resposta.
void send_last();
Reenvia ultima mensagem.
void communication(char *data, int type, int orig, int dest, int first);
Inicia uma comunicação com o destinatario, fragmentando o data em pedaços [15] se necessario e enviando
uma mensagem por vez após o recebimento do ACK;
A variavel first sincroniza a seq = 0 para inicio de uma nova comunicação.
void init_socket();
Inicia o socket sock_r universal para ser utilizado no envio e recebimento de mensagens.
Package_header * recieve_msg();
Recebe a mensagem;
Pontos faltantes do trabalho: timeout tive dificuldades com a implementação do timeout, devido a ter ficado por ultimo creio que o desenvolvimento do jeito que foi feito dificultou a junção dessa função e o trabalho acabou ficando com problemas de espera infinita.
O trabalho proporcionou uma visão pratica da implementação de transmissão de socket e do protocolo kermit, a falta de conteudo sobre implementação não era abundante e dificultou um pouco porém o tempo para realização do trabalho compensou. Demandou muita pesquisa e consequentemente a leitura sobre aplicação dos sockets com outros protocolos, no geral demandou bastante esforço porém recompensa quando você vê os resultados.