Skip to content

Latest commit

 

History

History
141 lines (108 loc) · 4 KB

File metadata and controls

141 lines (108 loc) · 4 KB

Implementação de um Protocolo de Aplicação sobre UDP para Operações Aritméticas

Desenvolvimento do trabalho de Redes de Computadores que consiste na implementação em Java de um cliente e servidor que se comunicam por meio de mensagens UDP para realizar operações atitméticas.

Execução (Rodar na raiz do projeto)

Compilar:

mkdir -p out
javac -d out src/Client/*.java src/Server/*.java src/Client/operation/*.java

Terminal 1 (Iniciar o Servidor):

java -cp out Server.MainServer

Terminal 2 (Iniciar o Cliente):

java -cp out Client.MainClient

Autor

  • João Victor Domingos e Souza (@John626)

Repo GitHub

O projeto se encontra disponível no GitHub: ArithUDP

Formato da requisição

Cada mensagem de requisição segue a estrutura abaixo:

REQUEST
ID: <identificador do cliente/operação> 
OPS:
<linha de operação 1>
<linha de operação 2>
...
END
  • A primeira linha precisa ser REQUEST. Caso contrário a requisição é rejeitada como erro de protocolo.
    • O identificador (ID:) é recomendado para correlacionar respostas, mas não é obrigatório.
    • A seção OPS: deve existir e listar uma operação por linha. Cada linha é composta pelo código da operação seguido dos operandos separados por espaço.
    • A mensagem termina com END.

Operações suportadas

Código Tipo Descrição Uso
ADD Binária Soma ADD a b
SUB Binária Subtração SUB a b
MUL Binária Multiplicação MUL a b
DIV Binária Divisão DIV a b (b ≠ 0)
MOD Binária Módulo MOD a b
POW Binária Potência POW a b
SQRT Unária Raiz quadrada SQRT x (x ≥ 0)
CBRT Unária Raiz cúbica CBRT x

Operandos aceitam números inteiros ou decimais em ponto flutuante.

Formato da resposta

Toda resposta do servidor segue a estrutura:

RESPONSE
ID: <identificador ecoado ou NO_ID>
RESULTS:
<resultado 1>
<resultado 2>
...
END
  • A seção ID replica o valor enviado pelo cliente.
  • A seção RESULTS: lista, na mesma ordem das linhas enviadas, o resultado de cada operação.

Linhas de resultado

Cada linha em RESULTS: tem um dos formatos abaixo:

  • Sucesso: OK <valor>valor é formatado sem zeros/exp científicas desnecessários.
  • Erro: ERROR <CODIGO> <detalhe>CODIGO indica o tipo do problema.

Códigos de status/erro

Código Situação detectada
BAD_REQUEST Estrutura geral inválida (linha inicial errada ou ausência da seção).
BAD_FORMAT Linha de operação faltando argumentos ou número inválido.
BAD_PROTOCOL Quantidade de argumentos não condiz com a operação esperada.
BAD_OP Operação desconhecida.
DIV_ZERO Divisão por zero ao processar DIV.
DOMAIN Resultado inválido (ex.: SQRT de número negativo).
SERVER_ERROR Exceção interna ao processar a requisição.

Exemplo de troca

Requisição

REQUEST
ID: 1767563969136
OPS:
ADD 2 3
SQRT 9
DIV 10 0
END

Resposta

RESPONSE
ID: 1767563969136
RESULTS:
OK 5
OK 3
ERROR DIV_ZERO divisão por zero
END

Referência de implementação