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