programação distribuída em java aula 03. 2 na aula passada vimos: i/o streams filtros readers and...
TRANSCRIPT
Programação Distribuída em Java
Aula 03
2
Na aula passada vimos:
• I/O
• Streams• Filtros• Readers and Writers
3
O que você deve ter fixado:
• Tratamento básico de entrada e saída
• Encadeamento de filtros
• Manipulação de streams
4
Na aula de hoje veremos:
• Sockets
5
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
6
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
7
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
LowPortScanner.java 8
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
9
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
10
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
DaytimeClient.java 11
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
12
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.
13
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
14
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);}
HighPortScanner.java 15
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);}
16
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);}
17
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);}
SocketInfo.java 18
Socket
Métodos básicos
public InetAddress getInetAddress()public InetAddress getInetAddress()public int getPort()public int getLocalPort()
public InputStream getInputStream()public OutputStream getOutputStream()
DayTime.java and Echo.java 19
Socket
Métodos básicos
public InputStream getInputStream()public OutputStream getOutputStream()
20
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
LocalPortScanner.java 21
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
22
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
RandomPort.java 23
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
DaytimeServer.java 24
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
SingleFileHTTPServer.java 25
Cliente A
Cliente B
Cliente C
Cliente D
ServerSocket
Aplicação Servidora
Socket
Socket
Socket
Socket
Socket
Socket
Socket
Socket
26
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
27
Na próxima aula veremos:
• Suporte Java para rede
• Pacote java.net