29
Programação Distribuída em Java Aula 05

Programação Distribuída em Java Aula 05. 2 Na aula passada vimos Domain Name Server –Funcionamento básico O pacote java.net –Sua finalidade A classe InetAddress

Embed Size (px)

Citation preview

Programação Distribuída em Java

Aula 05

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

29

Na próxima aula veremos:

• policytool

• SecurityManager