Programação Distribuída em Java Aula 03 Na aula passada vimos: • I/O • Streams • Filtros • Readers and Writers 2 O que você deve ter fixado: • Tratamento básico de entrada e saída • Encadeamento de filtros • Manipulação de streams 3 Na aula de hoje veremos: • Sockets 4 Socket • Abstração que permite ao programador tratar uma conexão de rede como um stream de dados. • Libera do programador dos detalhes de baixo nível da rede • Um socket conecta dois hosts 5 Socket • Um Socket é uma conexão • Socket permite tratar a conexão como I/O • Ler ou enviar dados em uma rede deve ser tão simples como fazê-lo para um arquivo local 6 Portas lógicas • Abstrações na memória do computador • Não têm características físicas • Estão registradas em cada pacote de informação 7 Portas notáveis • De 1 a 1023 • Breve lista – – – – – – – – 07 echo 13 daytime 21 FTP 23 Telnet 25 SMTP 80 HTTP 110 POP3 1099 RMI Registry • Lista detalhada em: http://pt.wikipedia.org/wiki/Lista_de_portas_de_protocolos LowPortScanner.java 8 Operações Básicas dos Sockets • • • • • • • Conectar a máquinas remotas Enviar dados Receber dados Encerrar conexão Conectar-se a portas lógicas Aguardar chegada de dados Aceitar conexão de máquinas remotas 9 Sockets • Clientes e servidores usam sockets • Os três últimas operações citadas são próprias dos servidores • São implementadas apenas por ServerSockets 10 Ciclo de vida de um programa que usa Socket • • • • • Criação do socket Conexão ao host remoto Obtenção dos streams de entrada e saída Troca de informações Encerramento da conexão DaytimeClient.java 11 A Classe Socket • Java.net.Socket é a classe fundamental para operações no lado cliente. • Outras classes Java que fazem conexão de rede usam Socket implicitamente. 12 Java.net.Socket • Possui quatro construtores públicos e dois protegidos • Cada construtor especifica o host e a porta à qual você deseja se conectar • Eventualmente o construtor pode indicar uma interface, ou seja, um ponto alternativo de conexão (físico ou virtual) com a máquina atual 13 public Socket (String host, int port) throws UnknownHostException, IOException try { Socket s = new Socket (“www.ime.usp.br”, 80); // execução do programa } catch(UnknownHostException e){ System.out.println(e); } catch(IOException e){ System.out.println(e); } 14 public Socket ( InetAddress ia , int port ) throws UnknownHostException, IOException try { String host = www.ime.usp.br; InetAddress ia = InetAddress.getByName(host); Socket s = new Socket (ia , 80); // execução do programa } catch(UnknownHostException e){ System.out.println(e); } catch(IOException e){ System.out.println(e); } HighPortScanner.java 15 public Socket (String host, int port , InetAddress interface, int localPort ) throws UnknownHostException, IOException try { Socket s = new Socket (“www.ime.usp.br”, 80, interface, localPort); // execução do programa } catch(UnknownHostException e){ System.out.println(e); } catch(IOException e){ System.out.println(e); } 16 public Socket (InetAddress ia , int port, InetAddress interface, int localPort ) throws UnknownHostException, IOException try { String host = www.ime.usp.br; InetAddress ia = InetAddress.getByName(host); Socket s = new Socket (ia , 80, interface, localPort); // execução do programa } catch(UnknownHostException e){ System.out.println(e); } catch(IOException e){ System.out.println(e); } 17 Socket Métodos básicos public InetAddress getInetAddress() public InetAddress getInetAddress() public int getPort() public int getLocalPort() public InputStream getInputStream() public OutputStream getOutputStream() SocketInfo.java 18 Socket Métodos básicos public InputStream getInputStream() public OutputStream getOutputStream() DayTime.java and Echo.java 19 Socket • Um socket é fechado quando: – Um ou os dois stream são fechados – O programa termina – Garbage collected • Recomenda-se o fechamento explícito • É possível fechar apenas um sentido do stream – public void shutDownInput() – public void shutDownOutput() Note que fechar a entrada e a saída não fecha o socket 20 Java.net.ServerSocket • Pelo lado servidor, para que seja possível a conexão, é necessário um ServerSocket • Um ServerSocket roda em um servidor e aguarda a chegada de solicitações de conexão LocalPortScanner.java 21 java.net.ServerSocket • Solicitações de conexão são colocadas em uma fila • O tamanho default dessa fila é 50 • Em Java é possível alterar o tamanho dessa fila 22 java.net.ServerSocket • Construtores – public ServerSocket(int port) – public ServerSocket(int port, int queueLength) trows BindException() – public ServerSocket(int port, int queueLength, InetAddress bind) todos lançam IOException RandomPort.java 23 Java.net.ServerSocket • ServerSockets aguardam as conexões enquanto Sockets as iniciam • Servidores usam o mesmo tipo de objeto Socket para o seu lado da comunicação • A quantidade máxima de conexões é dependente de sistema operacional DaytimeServer.java 24 ServerSocket Cliente A Socket Socket Cliente B Socket Socket Socket Cliente C Socket Socket Cliente D Socket Aplicação Servidora SingleFileHTTPServer.java 25 O que você precisa saber... • Características principais dos soquetes • Utilização de portas lógicas • Aquisição e manipulação do stream da rede • Esquema do ação dos servidores de soquetes 26 Na próxima aula veremos: • Suporte Java para rede • Pacote java.net 27