·

Cursos Gerais ·

Linguagens de Programação

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta

Texto de pré-visualização

1 Compilação 2 11 Para compilar 2 12 Para executar 2 2 Servidor 3 21 Requisição JOIN 3 22 Requisição SEARCH 3 23 Requisição UPDATE 3 24 Requisição ALIVE 4 3 Cliente 5 31 Requisição JOIN 5 32 Requisição SEARCH 5 33 Requisição UPDATE 5 34 Requisição ALIVE 5 1 Compilação Com o intelij comunity 2022 instalado na máquina abra o projeto no diretório raiz e aguarde o instalar as dependências do projeto Com o projeto configurado clique com o botão direito sobre o arquivo Serverjava e clique em Run Em seguida clique com o botão direito sobre o arquivo Clientjava e clique em Run Para compilar será necessário a JDK 18 instalada em seu computador como requisitada previamente no projeto O projeto foi desenvolvido com a ferramenta MAVEN para gerenciar a dependência do GSON 11 Para compilar Dentro do projeto existe dois executáveis mvnw para LINUX mvnwcmd para WINDOWS Dependendo de sua plataforma executeo com os seguintes argumentos mvnw clean compile assemblysingle mvnwcmd clean compile assemblysingle Com isso baixará a dependência do GSON compilar e gerar o JAR com as dependências na pasta target dentro do projeto 12 Para executar O Server java cp targetp2p10SNAPSHOTjarwithdependenciesjar comjp2pp2pServer O PeerClient java cp targetp2p10SNAPSHOTjarwithdependenciesjar comjp2pp2pClient 2 Servidor O servidor basicamente possui 3 threads de comunicação l KeepAlive Responsável por mandar o comando ALIVE para os peers armazenados na lista de peers do servidor caso não receba um ALIVEOK é removido o peer da lista a thread inicia em Serverjava linha 269 dentro da função Listener l HandleRequest Responsável por tratar as requisições UDP vindas dos peers Dentro dela é chamado outra Thread que trata o fluxo principal o nome dela é Clienteservidor l ClienteHandler Thread responsável por tratar o fluxo de mensagens de acordo com o tipo enviado Para cada padrão de requisição UDP ela redireciona para um método diferente que trata os dados de acordo com o fluxo 21 Requisição JOIN O servidor recebe a requisição JOIN vinda de um peer qualquer via UDP Então registra em uma lista as informações com uma classe de DTO chamada ClienteDTO Serverjava linha 13 com endereço e porta em seguida retorna com String o texto JOINOK 22 Requisição SEARCH O servidor recebe a requisição SEARCH vinda de um peer contendo um fileToSearch no escopo da classe Message a partir disso o método handleSearchRequest linha 140 em Serverjava pesquisa na lista de peers e verifica os peers que contém o arquivo preenchem então o campo clientsWithFile e peerPortWithFile com respectivamente o endereço dos peers que contém o arquivo e a porta deles em seguida seta a mensagem como SEARCHOK e reponde o Peer solicitante 23 Requisição UPDATE O servidor recebe a requisição UPDATE vinda de um peer que acabou de realizar um download e atualiza o registro dele linha 131 do Serverjava 24 Requisição ALIVE O servidor de 30 em 30 segundos dispara na thread KeepAlive o comando ALIVE para cada peer cadastrado no servidor caso não encontre ou der timeout ele remove da lista de peer 3 Cliente O cliente possui basicamente 3 threads de comunicação l Cliente O próprio cliente é uma Thread pois ele é executado múltiplas vezes dentro da aplicação l AliveHandler Responsável por responder as requisições ALIVE com ALIVEOK vindas do servidor Definida em linha 294 em Clientejava l DownloadHandler Thread responsável por tratar o fluxo de download vinda de um Peer 31 Requisição JOIN O cliente envia a requisição JOIN via UDP contendo a porta e um array de files e espera que seja retornado o texto JOINOK para iniciar o sistema em seguida mostra o menu 32 Requisição SEARCH O servidor recebe a requisição SEARCH vinda de um peer contendo um fileToSearch no escopo da classe Message a partir disso o método handleSearchRequest linha 140 em Serverjava pesquisa na lista de peers e verifica os peers que contém o arquivo preenchem então o campo clientsWithFile e peerPortWithFile com respectivamente o endereço dos peers que contém o arquivo e a porta deles em seguida seta a mensagem como SEARCHOK e reponde o Peer solicitante 33 Requisição UPDATE O servidor recebe a requisição UPDATE vinda de um peer que acabou de realizar um download e atualiza o registro dele linha 131 do Serverjava 34 Requisição ALIVE O servidor de 30 em 30 segundos dispara na thread KeepAlive o comando ALIVE para cada peer cadastrado no servidor caso não encontre ou der timeout ele remove da lista de peer 2022 1