Slide 1 - IME-USP

Propaganda
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
Download