INE6514
Aula Prática – P2P

Prof. Frank Siqueira

Programa de Pós-Graduação em Ciência da Computação
Universidade Federal de Santa Catarina
 

INE5418 | Descrição | Roteiro | Dúvidas


Descrição

Essa atividade apresenta algumas APIs para criação de redes peer to peer (P2P). Serão vistas APIs para as redes BitTorrent, GnuTella e JXTA. 


Roteiro

BitTorrent

Primeiramente, iremos usar a Java BitTorrent API para ilustrar o funcionamento de uma rede BitTorrent. Efetue o download do arquivo de instalação e o descompacte no seu computador. Em seguida, execute os procedimentos descritos abaixo.

1. Execução do Tracker

Abra um terminal/prompt de comando, vá até o diretório criado após a descompactação do arquivo de instalação e execute o script ./env.sh (no Linux) ou env.bat (no Windows), que adiciona a API ao CLASSPATH. Em seguida, execute o comando abaixo, que coloca um servidor tracker em execução:

java trackerBT.Tracker example_tracker_config.xml

O tracker deve ficar executando permanentemente, coordenando o download de arquivos.

2. Criação do Torrent

Abra outro terminal/prompt de comando, vá até o diretório no qual foi instalada a API e execute o script env.sh ou env.bat. Em seguida, copie um arquivo razoavelmente grande (~50MB) para o diretório example/client1. Execute o comando, substituindo os nomes do arquivo torrent, do arquivo a ser compartilhado e do criador do torrent, e ainda a descrição textual do arquivo:

java jBittorrentAPI.ExampleCreateTorrent example/client1/arquivo.torrent http://localhost:8081/announce 256 example/client1/arquivo.zip .. "criador do torrent" .. "descrição do arquivo"

O comando cria um arquivo torrent, que contém a URL do tracker que coordenará o download do arquivo, metadados sobre o aquivo, e o hash de cada um dos fragmentos de 256KB do arquivo.

Em seguida, o Tracker deve ser avisado para publicar o arquivo, executando o comando:

java jBittorrentAPI.ExamplePublish example/client1/arquivo.torrent http://localhost:8081/upload none none "descrição do arquivo"

Caso pretenda permitir o download remoto do arquivo, troque nos comandos acima “localhost” pelo hostname ou pelo IP do computador no qual o tracker foi executado. (Obs.: Isso não pode ser feito no laboratório devido ao bloqueio de portas da rede).

Os arquivos src/jBittorrentAPI/ExampleCreateTorrent.java e src/jBittorrentAPI/ExamplePublish.java mostram como usar a API para criar e publicar o torrent.

3. Compartilhando o arquivo

Execute o comando abaixo para compartilhar o arquivo:

java jBittorrentAPI.ExampleShareFiles example/client1/arquivo.torrent example/client1/

Agora o arquivo está disponível para download. Mantenha o programa em execução para que outros peers possam baixar o arquivo.

O arquivo .torrent, criado no diretório example/client1, já pode ser disponibilizado para outros peers. Ele poderia ser colocado em um servidor Web, disponibilizado em um servidor de busca de torrents ou enviado por e-mail. Nesse exemplo, como todos os clientes serão executados na mesma máquina, não haverá necessidade de distribuir o arquivo torrent.

O arquivo src/jBittorrentAPI/ExampleShareFiles.java mostra como usar a API para compartilhar um arquivo.

4. Baixando o arquivo

Abra outro terminal/prompt de comando, vá até o diretório no qual foi instalada a API e execute o script env.sh / env.bat.

Execute o comando:

java jBittorrentAPI.ExampleDownloadFiles example/client1/arquivo.torrent example/client2/

O arquivo será baixado para o diretório example/client2. Os fragmentos serão baixados um a um do peer que compartilhou o arquivo. O programa continuará em execução para disponibilizar o arquivo para outros peers.

O arquivo src/jBittorrentAPI/ExampleDownloadFiles.java mostra como a API é usada para efetuar o download de um arquivo.

Tente baixar o arquivo novamente, executando em outra janela o comando acima, alterando o local de salvamento (client3, client4, etc.). Se possível, execute dois ou mais clientes simultaneamente. Note que os fragmentos do arquivo serão baixados do peer que compartilhou o arquivo e/ou dos demais peers que efetuaram ou estão efetuando o download do arquivo.

Interrompa a execução do peer que disponibilizou primeiramente o arquivo. Note que, como outros peers já obtiveram cópias completas do arquivo, ele pode continuar sendo baixado por novos peers.

Você também pode usar qualquer programa cliente para torrents, como o BitTorrent e o µtorrent, para baixar o arquivo. Basta abrir o arquivo example/client1/arquivo.torrent no programa.

GnuTella

Existe uma API em Java para a rede GnuTella, chamada JTella. O aplicativo de exemplo MyNode mostra a lista de peers conhecidos, as mensagens de busca recebidas por inundação, permite efetuar buscas e mostra as respostas recebidas.

O código-fonte da aplicação ilustra o uso da API. O JavaDoc da API pode ser consultado aqui.

JXTA

O aplicativo JXTA Shell mostra como ocorre a interação entre peers na rede JXTA. Os comandos que podem ser executados no Shell são descritos neste guia de utilização.

A documentação da implementação do JXTA para Java SE pode ser consultada aqui. Há também implementações do JXTA em C/C++ e para Java ME. 


Dúvidas?

Atendimento aos Alunos

  • Horário: Terças-feiras das 16:20 às 18:00.
  • Local: Prédio do INE - Sala 407.

E-Mail

f r a n k @ i n f . u f s c . b r


Mantida por Frank Siqueira. Atualizada em 22/10/2010.