luiz carlos d´oleron [email protected] sjcp java sockets java avançado

19
Luiz Carlos d´Oleron [email protected] SJCP Java Sockets Java Avançado

Upload: internet

Post on 19-Apr-2015

142 views

Category:

Documents


19 download

TRANSCRIPT

Page 1: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

Luiz Carlos d´[email protected]

SJCP

Java Sockets

Java Avançado

Page 2: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

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. ...

Page 3: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

Luiz Carlos d´Oleron – [email protected]

Camadas de Rede

Aplicação

Transporte

Rede

Enlace

Física

Aplicação

Transporte

Rede

Enlace

Física

Page 4: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

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

Page 5: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

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...

Page 6: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

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)

Page 7: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

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

Page 8: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

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

Page 9: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

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

Page 10: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

Luiz Carlos d´Oleron – [email protected]

Java Sockets e I/O

Page 11: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

Luiz Carlos d´Oleron – [email protected]

Java Sockets e I/O

Page 12: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

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.

Page 13: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

Luiz Carlos d´Oleron – [email protected]

ServerSocket

Page 14: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

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

Page 15: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

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

Page 16: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

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)

Page 17: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

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

Page 18: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

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

Page 19: Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Java Sockets Java Avançado

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