luiz carlos d´oleron [email protected] sjcp java sockets java avançado
TRANSCRIPT
Luiz Carlos d´Oleron – [email protected]
Sistemas Distribuídos
“Um sistema distribuído é uma coleção de processadores pouco acoplados, interconectados por uma rede de comunicação”
Sistemas Operacionais com JavaSilberschatz, Galvin e Gagne
Principais Vantagens:
1. Compartilhamento de Recursos
2. Aumento da Velocidade de Computação
3. Confiabilidade
4. Comunicação
5. ...
Luiz Carlos d´Oleron – [email protected]
Camadas de Rede
Aplicação
Transporte
Rede
Enlace
Física
Aplicação
Transporte
Rede
Enlace
Física
Luiz Carlos d´Oleron – [email protected]
Protocolos de Rede
Aplicação
Transporte
Rede
Enlace
Física
Aplicação
Transporte
Rede
Enlace
Física
HTTP,RMI, etc
TCP e UDP
IPv4 e IPv6
Ethernet e ATM
Luiz Carlos d´Oleron – [email protected]
TCP
• Principais Características:
– Protocolo da camada de transporte– Complexo– Orientado à conexão– Confiável– Multiplexação/Demultiplexação– Detecção de Erros– Controle de Congestionamento– Menos performático do que UDP– Utilizado em diversas aplicações: FTP, email, HTTP,
RMI, etc...
Luiz Carlos d´Oleron – [email protected]
Sockets e Portas
• TCP usa duas abstrações chamadas Sockets e Portas
• Portas e Sockets não existem fisicamente
• Em Java, um socket é um objeto que sabe como enviar e receber dados de (e para) um outro computador através de uma rede
• Java Sockets usam TCP, apesar que não é necessário saber isso para usar Sockets (encapsulamento)
Luiz Carlos d´Oleron – [email protected]
Servidores e Portas
• Servidores (Servers) são computadores que disponibilizam serviços através de Portas
• Cada serviço é disponibilizado através de uma porta
• Quando queremos usar um serviço, usamos TCP, informando o endereço IP da máquina e a Porta do serviço
• Por exemplo, o serviço de um HTTP server normalmente atende pela porta 80 (default)
• Entretanto, muitos Application Server (Tomcat por exemplo) são normalmente configurados para atender pela porta 8080
Luiz Carlos d´Oleron – [email protected]
Sockets e Portas
• Exemplos:
– http://172.17.0.13/ (acesso pela porta 80)
– http://172.17.0.14:8080/ (acesso pela porta 8080)
– mysql://arcoverde:3306/jornada
– rmi://localhost:1099/server
Luiz Carlos d´Oleron – [email protected]
Sockets em Java
• É representado pela classe java.net.Socket
• Usa TCP, logo herda todas as características dele (principalmente a confiabilidade)
• Exemplo de Construtor:
public Socket(String ipserver, int porta) throws IOException;
• Após o construtor executar, o socket já estará apto para se comunicar
• Se o socket não conseguir se comunicar, será lançada uma IOException
• Permite escrita e leitura através de Input e OutputStream´s
Luiz Carlos d´Oleron – [email protected]
Java Sockets e I/O
Luiz Carlos d´Oleron – [email protected]
Java Sockets e I/O
Luiz Carlos d´Oleron – [email protected]
ServerSocket
• É representado pela classe java.net.ServerSocket
• A função principal de um ServerSocket é aguardar pela conexão de um Socket
• Um dos construtores mais utilizados é:
public ServerSocket(int porta) throws IOException;
• Se o ServerSocket não conseguir se instalar na porta, será lançada uma IOException
• Diferente do Socket, após o construtor executar, o ServerSocket deverá chamar acept() para aguardar uma conexão
• acept() retorna um socket. Após acept() retornar, o ServerSocket poderá se comunicar com este socket.
Luiz Carlos d´Oleron – [email protected]
ServerSocket
Luiz Carlos d´Oleron – [email protected]
Streams e Serialização
• Objetos são estruturas complexas
• ...Possuem vários atributos
• ...Seus atributos podem ser outros objetos
• ...Que possuem mais atributos
• ...Criando uma estrutura em árvore
• E olhe que nem falamos dos métodos, atributos de classe, etc...
• Como enviar via rede um objeto complexo?
• Com serialização
Luiz Carlos d´Oleron – [email protected]
Streams e Serialização
• Serialização é o processo de transformar uma estrutura de dados complexa, como um objeto, em uma série de bytes
• A série gerada é “enviada pelo fio” da rede
• Do outro lado, o objeto é rematerializado
• Graças ao Java Team, a JVM faz isso para nós
• Basta que indiquemos que a classe do objeto implementa a interface java.io.Serializable
• Obs.: os atributos do objeto devem ser Serializable também
• Isso é o mesmo processo usado para se gravar um objeto em um arquivo
Luiz Carlos d´Oleron – [email protected]
UnmarshalException
• Se você tentar enviar um objeto via rede que não pode ser serializado, será lançada uma UnmarshalException
• Marshaling e UnMarshaling são outros nomes dados para os processos de Desmaterizalizar e Materializar o objeto
• Quando ocorrer, observe se o objeto que você está enviando é Serializable (lembre-se dos atributos)
Luiz Carlos d´Oleron – [email protected]
Sockets e Threads
• O normal é que tenhamos vários clientes para poucos servidores
• Assim, um servidor deve poder atender a vários clientes ao mesmo tempo
• Isto é feito escalonando Threads no lado do servidor, de forma que cada Thread cuide de um cliente
Luiz Carlos d´Oleron – [email protected]
Exercício: Um servidor de arquivos
• Realizar em dupla• Criar um cliente que use um Socket para se conectar a um servidor
e enviar automaticamente um arquivo do sistema operacional (Upload)
• Os primeiros 50 bytes enviados serão usados para enviar o nome do arquivo (só o nome com extensão)
• Os arquivos podem ser de qualquer tipo• Criar um servidor que aguarde conexões. Quando algum socket
conectar a ele, automaticamente o servidor irá coletar os bytes enviados e irá criar um arquivo em uma pasta do Sistema Operacional.
• Nos primeiros 50 bytes recebidos, estará o nome do arquivo enviado.
• O servidor poderá ser conectado por vários clientes ao mesmo tempo
Luiz Carlos d´Oleron – [email protected]
Expansão do Exercício (opcional)
• Os arquivos enviados pelo cliente ao servidor podem ser enormes, maiores do que 1 Gb
• O cliente poderá enviar vários arquivos ao mesmo tempo
• O servidor poderá atender apenas a um número limitado (k <=10) de clientes simultaneamente
• No final do Upload, o servidor envia uma mensagem de confirmação para o cliente
• O cliente poderá efetuar além de uploads, downloads de arquivos do servidor