Programação Distribuída em Java Aula 03 Na aula passada vimos: • I/O • Sockets 2 Na aula de hoje veremos: • Domain Name Server • O pacote java.net • A classe InetAddress • A classe Url • A classe UrlConnection 3 Domain Name Server (DNS) • O ser humano consegue memorizar seqüências de até sete números • DNS associa endereços IP a hostname’s para simplificar a memorização do ser humano • Note que um endereço é diferente de um nome de host – As pessoas chamam hostname’s de endereço... Nesse curso será feita uma clara (e necessária) distinção 4 Domain Name Server (DNS) • Um nome pode mapear vários endereços • Todo computador conectado a Internet deve ter acesso a um DNS – Veja: http://neosite.ilogic.com.br/artigos/o_que_e_ip_e_dns.htm 5 Domain Name Server (DNS) world Fapesp (*.br) other another dns uol aol dns bol sol mol rol 6 Package java.net • Fornece as classes para a implementação de aplicações em rede • Possui 28 classes, 6 interfaces e 11 exceções • Serão estudadas apenas as classes principais 7 java.net.InetAddress • Representa um endereço IP • Pode ter 32 ou 128 bits – Veja as subclasses: Inet4Address e Inet6Address • Endereços da forma: ddd.ddd.ddd.ddd – Usando o padrão atual: IPv4 – Quadra pontuada (dotted quad) Ex.: USP.java 8 java.net.InetAddress • É usada pela maioria das classes Java que fazem conexão de rede • Possui apenas dois campos privados: – String hostName – int address • Não há construtores públicos 9 Inicializando InetAddress • public static InetAddress InetAddres.getByName(String host) trows UnknownHostException • public static InetAddress InetAddres.getAllByName(String host) trows UnknownHostException Ex.: Microsoft.java 10 Inicializando InetAddress • public static InetAddress InetAddres.getLocalHost (String host) trows UnknownHostException • String host pode ser: “208.125.15.47” e não apenas um hostname • Note que os três métodos estáticos realmente fazem uma conexão de rede com o DNS para obter informações Ex.: UspByAddress.java 11 Acessando campos de InetAddress • Normalmente não queremos imprimir o “próprio” objeto InetAddress, usamos: – public String getHostName() – public String getHostAddress() – public byte[] getAddress() • O último getter pode ser usado para determinar o tipo (classe) de endereço Ex.: MyAddress.java 12 java.net.URL • Classe que encapsula as características de um Uniform Resource Locator (url) • Um url se caracteriza pelos campos: – – – – – – Protocolo Nome do host Porta Caminho Consulta Referência (ou âncora) • Um URL é imutável 13 Inicializando java.net.URL • Diferente de InetAddress, é possível se construir um objeto URL • O programador é responsável por garantir que o URL criado é válido • Os protocolos utilizados pelo URL dependem da implementação Ex.: ProtocolTester.java 14 Construtores de URL • A partir de uma String URL u = new URL(“http://www.ime.usp.br/index.html”); • A partir dos componentes URL u = new URL(“http”, ”www.ime.usp.br”, “80”, “/index.html”); Note a barra que antecede o nome do arquivo... É um erro comum esquecê-la 15 Recuperando dados de um URL • public final InputStream openStream() Conecta-se ao recurso referenciado pelo URL Realiza algum acordo entre cliente e servidor Retorna um InputStream a partir do qual os dados podem ser lidos. Ex.: SourceViewer.java 16 Recuperando dados de um URL • public URLConnection openConnection() Abre um Socket para um URL específico Retorna um URLConnection que dá acesso a tudo o que for enviado pelo servidor, e.g. header’s Permite também o envio de dados ao URL try { URL u = new URL(http://www.fapesp.br); try { URLConnection uc = u.openConnection(); Inputstream in = uc.getInputStream(); // note que poderíamos aqui acessar o OutputStream de uc 17 Recuperando dados de um URL • public final Object getContent() Conecta-se ao recurso referenciado pelo URL Tenta converter ser conteúdo para algum objeto Java . • Existe uma versão sobrecarregada desse método na qual é possível verificar se a classe do objeto recebido é a esperada dentre uma lista fornecida pelo usuário. Ex.: ContentGetter.java 18 java.net.URLConnection • Representa uma conexão ativa a um recurso especificado por um URL • Fornece maior controle sobre a interação com o servidor • Permite a inspeção dos cabeçalhos MIME enviados por servidores HTTP • Um Socket pode fazer a maioria das coisas que um URLConnection faz 19 O que você precisa saber: • 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 20