2
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
3
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
4
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
5
Na aula de hoje veremos:
• O protocolo UDP
• A classe DatagramPacket
• A classe DatagramSocket
• MultiCastSocket
6
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
7
UDP – user datagram protocol
• Conection-less• Datagram-based• Unreliable• Postal-like
• Prize: high velocity
8
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
9
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
10
UDP no Java
• Não existe stream
• Trabalho com datagramas individuais
• Um DatagramSocket pode se comunicar com vários hosts
11
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
12
DatagramPacket
• Quanto menor melhor (mais seguro)
• Por segurança usa-se 512k ou menos por datagrama
• TCP libera o programador desses detalhes
DatagramExample.java 13
DatagramPacket constructors
• Usados para receber dadospublic DatagramSocket (byte[] buffer, int length)public DatagramSocket (byte[] buffer, int offset, int length)
• Usados para enviar dadospublic DatagramSocket (byte[] buffer, int length, InetAddress ia, int port)
public DatagramSocket (byte[] buffer, int offset, int length, InetAddress ia, int port)
14
DatagramPacket
• Métodos básicos– getPort()– getData()– getAddress()– getLength()– getOffset()
• Existem os correspondentes setters
15
DatagramSocket
• Envia e recebe datagramas UDP
• Socket utilizado por cliente ou servidor é idêntico
• Diferem apenas pelo uso de porta anônima ou notávelCliente só usa anônima; atribuição aleatóriaServidor usa atribuição explícita
UDPPortScanner.java 16
DatagramSocket constructors
• Enviar dadospublic DatagramSocket()
• Receber dadospublic DatagramSocket(int port)public DatagramSocket(int port, InetAddress interface)
17
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.
UDPDiscardClient.java and UDPDiscarServer.java
18
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
19
Conexões UDP ?!?
• Todo soquete de datagrama pode conversar com qualquer host indiscriminadamente
• E quando queremos restringir a comunicação?
• Fazemos uma “conexão”!
20
Conexões UDP ?!?
public void connect(InetAddress ia, int port)Especifica para onde vai o datagramaEspecifica 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.
21
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-a-ponto e difusão
QuoteServer.java 22
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
23
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...
24
Multicast group
• Conjunto de hosts “conectados” ao mesmo endereço multicast
• Endereços multicast são classe DEstã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
25
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
26
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
MulticastListener.java 27
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
28
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