You are on page 1of 5

Exemplos de Multicast em Java

Fabrício Barcellos Aguirre


Universidade Federal de Santa Catarina
Departamento de Informática e Estatística
Programa de Pós Graduação em Ciências da Computação
aguirre@inf.ufsc.br

RESUMO

Neste artigo será apresentada uma 2. MULTICAST


descrição do que é a tecnologia de
multicast. Logo após, será dada uma Multicast é a entrega de informações para
explicação acerca da linguagem Java e múltiplos destinatários simultaneamente,
posteriormente, serão apresentados usando a estratégia mais eficiente para
pequenos exemplos de utilização das entregar as mensagens por cima de cada
classes específicas da linguagem para esta uma das ligações da rede apenas uma vez
finalidade em aplicações de rede e e só criar cópias das mensagens quando
distribuídas. as ligações para os destinatários se
dividirem. Por comparação com o
PALAVRAS CHAVE: multicast, a entrega convencional ponto-
a-ponto é chamada unicast, onde a
Java, Multicast, Computação entrega para cada ponto na rede é um
Distribuída. broadcast. [3]
A palavra multicast é tipicamente
1. INTRODUÇÃO usada para se referir ao IP Multicast, que
é um protocolo para enviar dados de
Multicast é uma tecnologia de forma eficiente para múltiplos
entrega de informações em redes IP que destinatários ao mesmo tempo em redes
busca fazer uma melhor utilização dos TCP/IP, pelo uso de um endereço
canais de comunicação de rede multicast [4]. É comumente associado
disponíveis. A linguagem Java é a também com protocolos de áudio e vídeo
linguagem que está tendo mais destaque como RTP.
atualmente, por suas diversas Também existem outros
características. protocolos na internet que implementam o
Em vistas disto, a linguagem Java conceito de multicast. Algumas camadas
tem facilidades disponíveis para de ligação orientada a conexão, como
utilização desta funcionalidade de forma Asynchronous Transfer Mode, tem
muito simples e eficiente. Desta forma, implementados mecanismos para
apresenta-se dois pequenos exemplos de conexões ‘ponto-para-multiponto’ e
utilização dessas características, ‘multiponto-para-multiponto’. Esse
demonstrando a funcionalidade e a modelo geralmente presume que as
facilidade de implementação. estações participantes na comunicação
são conhecidas no tempo anterior, para
que as árvores de distribuição possam ser Internet, os pesquisadores da Sun
geradas e os recursos alocados por Microsystems perceberam que aquele
elementos da rede antes da liberação do seria um nicho ideal para aplicar a recém
tráfego. Por contraste, o modelo IP criada linguagem de programação. A
Multicast foi descrito como tendo os partir disso, adaptaram o código
pacotes colocados numa ponta e a Java para que pudesse ser utilizado em
conspiração da rede para entregá-los para microcomputadores conectados a rede
quaisquer que peçam para receber. Internet, mais especificamente no
Enquanto IP Multicast é um ambiente da World Wide Web. Java
modelo conceitual extremamente permitiu a criação de programas
satisfatório, requer um esforço maior na batizados applets, que trafegam e trocam
rede do que o IP Unicast baseado em dados através da Internet e se utilizam da
entrega por melhor esforço da rede, e de interface gráfica de um web browser.
certa forma causa um certo criticismo. Implementaram também o primeiro
IP Multicast não é de uso geral na browser compatível com a linguagem, o
internet comercial. Outras tecnologias de HotJava, que fazia a interface entre as
multicast, que não são baseadas no IP aplicações Java e o sistema operacional
Multicast, são bastante populares, como dos computadores. Com isso, a
Internet Relay Chat (IRC) e PSYC [5]. linguagem conseguiu uma popularização
Não são considerados muito elegantes, fora de série, passando a ser usada
mas são pragmáticos e escalam melhor amplamente na construção de
para grandes quantidades de pequenos documentos web que permitam maior
grupos. interatividade.
Os principais web browsers
disponíveis comercialmente passaram a
3. LINGUAGEM JAVA dar suporte aos programas Java, e outras
tecnologias em áreas como computação
Java é uma linguagem gráfica e banco de dados também
computacional completa, adequada para o buscaram integrar-se com o novo
desenvolvimento de aplicações baseadas paradigma proposto pela linguagem:
na rede Internet, redes fechadas ou ainda aplicações voltadas para o uso de redes de
programas stand-alone. Foi desenvolvida computadores [1].
na 1a metade da década de 90 nos Atualmente, a linguagem Java é a
laboratórios da Sun Microsystems com o está por trás de alguns dos maiores
objetivo de ser mais simples e eficiente avanços da computação mundial, como
do que suas predecessoras. O alvo inicial por exemplo:
era a produção de software para produtos
eletrônicos de consumo (fornos de - Acesso remoto a bancos de dados
microondas, agendas eletrônicas, etc.). - Bancos de dados distribuídos
Um dos requisitos para esse tipo de - Comércio eletrônico no WWW
software é ter código compacto e de - Network CAD
arquitetura neutra. - Interatividade em páginas WWW
A linguagem obteve sucesso em - Interatividade em ambientes de
cumprir os requisitos de sua Realidade Virtual distribuídos
especificação, mas apesar de sua - Gerência de Documentos
eficiência não conseguiu sucesso - Integração entre dados e forma de
comercial. Com a popularização da rede visualização
- Network Computer
- Ensino à distância String msg = "Oi pessoal";
- Jogos e entretenimento InetAddress group =
InetAddress.getByName("228.5.6.7");
MulticastSocket s = new
4. EXEMPLOS MulticastSocket(1234);
s.joinGroup(grupo);
Seguem-se pequenos exemplos da DatagramPacket oi = new
utilização da técnica de multicast na DatagramPacket(msg.getBytes(),
linguagem Java. msg.length(),
group, 1234);
4.1 Exemplo de Java Multicasting s.send(oi);

Aqui segue dois pequenos // Obter as respostas dos demais


exemplos descritivos de como escrever membros
uma aplicação multicast na linguagem
Java usando a classe específica byte[] buf = new byte[1000];
sun.net.MulticastSocket e com as devidas DatagramPacket recv = new
explicações. DatagramPacket(buf, buf.length);
s.receive(recv);

4.1.1 Uso e Código ...

A classe multicast datagram [6] // Opós o término da comunicação, usa-


socket é útil para o envio e recebimento se o comando para sair do grupo
de pacotes IP multicast. Um
MulticastSocket é um DatagramSocket s.leaveGroup(grupo);
com capacidades adicionais de se unir a
‘grupos’ de outros hosts multicast na
Internet. Um destes grupos multicast é Quando um membro envia uma
especificado por uma classe de IP com mensagem para um grupo multicast,
endereço D e um número padrão de porta todos os membros desse grupo que
UDP. Números IP desta classe variam de escutem a porta recebem a mensagem que
224.0.0.0 até 239.255.255. O primeiro foi enviada (sempre ressaltando que
desses endereços é reservado, e não deve dentro do tempo de vida do pacote). O
ser utilizado. socket não necessita ser membro de um
Um se uniria a um grupo multicast grupo multicast para enviar mensagens
por primeiramente criar um exemplar de para ele.
MulticastSocket com a porta desejada, e Quando um socket se inscreve
então invocar o método num grupo multicast, ele então passa a
joinGroup(InetAddress groupAddr) receber datagramas enviados por outros
hosts para o grupo, assim como todo e
// Une-se a um grupo Multicast e envia qualquer membro do grupo. Para sair de
uma saudação aos demais membros deste um grupo, o socket utiliza-se do comando
grupo the leaveGroup(InetAddress addr).
Múltiplos MulticastSocket's podem se
... inscrever em um grupo multicast e definir
uma porta concorrentemente, e desta byte buf[] = byte[1024];
forma, passam a receber todos os DatagramPacket pack = new
datagramas do grupo em que se DatagramPacket(buf, buf.length);
associaram. s.receive(pack);
Na versão em uso atualmente, aos
diversos applets não é permitido que 6 - // Finalmente, neste ponto se realiza
façam a utilização de nenhum dos sockets algo útil com os dados recentemente
multicast. recebidos,
// como por exemplo, mandá-los para um
stdout
4.1.2 Código System.out.println("Received data from: "
+ pack.getAddress().toString() +
Foram criados dois sockets neste ":" + pack.getPort() + "
exemplo, um deles para o envio de dados with length: " +
e um outro para recebimento, devido a pack.getLength());
existência de uma condição, tanto em System.out.write(pack.getData(),0,pack.g
Java como Solaris que faz com que ocorra etLength());
um travamento se tanto as funções de System.out.println();
envio e recebimento estiverem
localizadas no mesmo socket e realizarem 7 - // Quanto se finaliza a recepção de
a transmissão simultânea [2] dados, deixa-se o grupo multicast e fecha-
se o socket
Socket de Recebimento s.leaveGroup(InetAddress.getByName(gr
1 - // Importa algumas classes necessárias oup);
para o funcionamento s.close();
import sun.net.*;
import java.net.*; Socket de Envio
1 - // Importa algumas classes necessárias
2 - // Define qual porta deve ser escutada para o funcionamento
int port = 5000; import sun.net.*;
// Define o endereço import java.net.*;
String group = "225.4.5.6";
2 - // Define para por qual porta deve ser
3- // Cria o socket e faz a ligação dele enviada
para a porta chamada 'port'. int port = 5000;
MulticastSocket s = new // Define endereço de envio
MulticastSocket(port); String group = "225.4.5.6";
// Define ttl (tempo de vida)
4 - // Une-se ao grupo de multicast int ttl = 1;
s.joinGroup(InetAddress.getByName(gro
up)); 3 - // Cria-se o socket mas não se faz a
// Neste ponto, o socket está configurado ligação deve, pois apenas se realizará um
e se apresenta preparado para receber envio de dados
pacotes MulticastSocket s = new
MulticastSocket();
5 - // Cria um DatagramPacket (pacote
datagrama) e realiza uma recepção
4 - // Note que não há necessidade de funcionalidade e a facilidade de
aderir ao grupo multicast se estivermos implementação.
apenas enviando dados e não recebendo

5 - // Preenche-se o buffer com alguns 6. REFERÊNCIAS


dados
byte buf[] = byte[10]; [1] Indrusiak, L. S. Linguagem Java.
for (int i=0; i<buf.length; i++) buf[i] = Grupo JavaRS - JUG Rio Grande do Sul,
(byte)i; 1996
// Cria-se uma DatagramPacket (pacote
datagrama) [2] Parnes, P. Java Milticasting Example
DatagramPacket pack = new http://www.cdt.luth.se/~peppar/java/multi
DatagramPacket(buf, buf.length, cast_example/
InetAddress.getByName(group), port);
// Realiza um envio. Note que enviar [3] Wikipedia Multicast
toma um byte para o ttl e não um int http://en.wikipedia.org/wiki/Multicast
s.send(pack,(byte)ttl);
[4] Wikipedia Multicast address
6 - // Após a finalização do envio de http://en.wikipedia.org/wiki/Multicast_ad
dados, deve-se fechar o socket dress
s.close();
[5] Loesch, C. Protocol for SYnchronous
Conferencing
5. CONCLUSÃO http://psyc.pages.de/psyc.html

Neste artigo, foi colocada a [6] Sun Microsystems Class


definição do que é a tecnologia de MulticastSocket
Multicast e como funciona sua tecnologia http://java.sun.com/j2se/1.3/docs/api/java
de entrega de informações em redes IP, /net/MulticastSocket.html
através da melhor utilização dos canais de
comunicação da rede em uso pelos
processos. A linguagem Java e suas
características, foram colocadas em
termos explicativos logo então, citando
suas diversas características positivas e
avançadas, que fazem com que a
linguagem tenha tamanho destaque
atualmente, .
Com a colocações dos exemplos,
foram demonstradas as facilidades da
linguagem visando essa funcionalidade de
classes multicast e sockets para
comunicação pela rede, buscando
implementar de maneira simples e
eficiente. Com os dois exemplos
utilizados essas características são
apresentadas, buscando demonstrar a