Aula 05 - IME-USP

Propaganda
Programação Distribuída em
Java
Aula 05
Na aula passada vimos
• Domain Name Server
– Funcionamento básico
• O pacote java.net
– Sua finalidade
• A classe InetAddress
– O que representa
– Formas de utilização
2
Na aula passada vimos
• A classe Url
–
–
–
–
O que representa
Formas de utilização
Recuperação de dados
Acesso a CGI e Servlets
• A classe UrlConnection
– Representação
– Possibilidades
3
O que você deve ter fixado:
• Distinguir endereço de hostname; ter
noções de DNS
• Quando usar InetAddress e quando usar
URL
• Recuperar dados de um URL; enviar
solicitações a cgi e servlet
4
Na aula de hoje veremos:
• O protocolo UDP
• A classe DatagramPacket
• A classe DatagramSocket
• MultiCastSocket
5
Recordando TCP
• Transmissão confiável de dados
• Dados perdidos ou danificados são
reenviados
• Pacotes fora de ordem são ordenados
• Controle de velocidade de recepção de
pacotes
• Custo: baixa velocidade
6
UDP – user datagram protocol
•
•
•
•
Conection-less
Datagram-based
Unreliable
Postal-like
• Prize: high velocity
7
Mas por quê usar UDP ?
• Aplicações de tempo real; multicasting
• Velocidade crítica versus confiabilidade
• Possibilidade de controle na camada de
aplicação
– Domain Name Server DNS
– Network File System NFS
– Trivial FTP
TFTP
8
UDP no Java
• Java implementa UDP através das
classes:
• DatagramPacket
– Armazena dados na forma de bytes
• DatagramSocket
– Envia e recebe DatagramPacket
• Não existe algo como um
DatagramServerSocket
9
UDP no Java
• Não existe stream
• Trabalho com datagramas individuais
• Um DatagramSocket pode se comunicar
com vários hosts
10
DatagramPacket
• Acrescentam pouco aos datagramas de IP
• Sistema de portas independente do TCP
• Capacidade máxima 64k
– Incluindo 20 bytes de cabeçalho
– Incluindo 8 bytes próprios do datagrama de UDP
• Na prática utilizam-se no máximo 8k
11
DatagramPacket
• Quanto menor melhor (mais seguro)
• Por segurança usa-se 512k ou menos por
datagrama
• TCP libera o programador desses
detalhes
12
DatagramPacket constructors
• Usados para receber dados
public DatagramSocket (byte[] buffer, int length)
public DatagramSocket (byte[] buffer, int offset, int length)
• Usados para enviar dados
public DatagramSocket (byte[] buffer, int length,
InetAddress ia, int port)
public DatagramSocket (byte[] buffer, int offset, int length,
InetAddress ia, int port)
DatagramExample.java
13
DatagramPacket
• Métodos básicos
–
–
–
–
–
getPort()
getData()
getAddress()
getLength()
getOffset()
• Existem os correspondentes setters
14
DatagramSocket
• Envia e recebe datagramas UDP
• Socket utilizado por cliente ou servidor é
idêntico
• Diferem apenas pelo uso de porta
anônima ou notável
Cliente só usa anônima; atribuição aleatória
Servidor usa atribuição explícita
15
DatagramSocket constructors
• Enviar dados
public DatagramSocket()
• Receber dados
public DatagramSocket(int port)
public DatagramSocket(int port, InetAddress interface)
UDPPortScanner.java
16
Enviar e receber datagramas
• Um DatagramSocket pode fazer ambas as
operações
• Pode receber e enviar para vários host’s
ao mesmo tempo!
• Exceções podem ser geradas ou não.
17
Enviar e receber datagramas
• O método send() envia um packet por vez
• O método receive(), assim como accept()
bloqueia a execução do programa
• receive() armazena o datagrama que veio
da rede em um DatagramSocket local
Importante lembrar que o tamanho máximo de um datagrama é
64k
UDPDiscardClient.java and
UDPDiscarServer.java
18
Conexões UDP ?!?
• Todo soquete de datagrama pode
conversar com qualquer host
indiscriminadamente
• E quando queremos restringir a
comunicação?
• Fazemos uma “conexão”!
19
Conexões UDP ?!?
public void connect(InetAddress ia, int port)
Especifica para onde vai o datagrama
Especifica que só recebe datagramas desse mesmo local
A chegada de datagramas de outro endereço gera uma
IllegalArgumentException
Pacotes recebidos de outro endereço ou porta são descartados.
20
MulticastSocket
• Envia dados de um host para vários hosts
• Dados vão apenas para clientes que
expressam interesse
• Meio termo entre comunicação ponto-aponto e difusão
21
MulticastSocket
• Pode ser usado no lado servidor
• Deve ser usado no lado cliente
• A cada estímulo envia a mesma
mensagem a todos do grupo
QuoteServer.java
22
Possibilidades de MulticastSocket
•
•
•
•
•
•
Games multi-player
Sistemas de arquivos distribuídos
Computação paralela intensiva
Teleconferência
Web sites de alto tráfego
Entre outras...
23
Multicast group
• Conjunto de hosts “conectados” ao
mesmo endereço multicast
• Endereços multicast são classe D
Estão no intervalo 224.0.0.0 a 238.255.255.25 5
• Endereços começados em 224 ou 239
são reservados para serviços baixo nível
24
MulticastSocket
• A maioria dos grupos multicast é
temporária
• 248 milhões de endereços nesse intervalo
podem ser usados livremente.
• Roteadores são responsáveis por impedir
que dois grupos usem o mesmo endereço
25
MulticastSocket
• Dados multicast usam UDP, logo são três
vezes mais rápidos que TCP
• Requer atenção especial ao TTL
O Time to Live é usado para que os pacotes perdidos não
inundem a Internet
• Todos os receptores devem ouvir na
mesma porta
26
MulticastSocket no lado cliente
• Crie um MulticastSocket e junte-se a um
grupo
– Usar o método joinGroup (InetAddress groupAddress)
• Troque informações e deixe o grupo
– Usar os métodos: send(), receive e leaveGroup()
• Na verdade, para enviar uma mensagem a um grupo
não é necessário ser parte dele
MulticastListener.java
27
O que você precisa saber:
• Compreender as vantagens e desvantagens do
uso de UDP
• Converter a informação em bytes
• Compreender as características particulares de
soquetes de datagrama
• Entender quando usar um MulticastSocket
28
Na próxima aula veremos:
• policytool
• SecurityManager
29
Download