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
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 1024 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 1024KB (1MB) do arquivo.
Em
seguida, deve ser solicitado ao Tracker 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.
Outras
APIs para Torrents
Existem
APIs e bibliotecas para uso de Torrents em diversas outras linguagens, como
por exemplo a biblioteca libtorrent para C++ e
a TorrentEditor API para PHP.
Prática
Atenção:
os procedimentos descritos a seguir não funcionarão no laboratório devido ao
bloqueio de portas da rede. Portanto, devem ser realizados como atividades
extra-classe.
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.
O JXTA
possui implementações para Java SE,
Java ME e C/C++.
Dúvidas?
Atendimento
aos Alunos
- Horário:
Terças-feiras das 16:20 às 18:00.
- Local:
Prédio do INE - Sala 305.
E-Mail
f r a n k @ i n f . u f s c . b r
Mantida
por Frank Siqueira.
Atualizada em 24/04/2012.
|