Sei sulla pagina 1di 49

Comunicao em Sistemas Distribuidos

Uma Introduo a Socket e


RMI - Invocao de Mtodos
Remotos

Sistemas Distribudos - Socket


Introduo
Tipos de socket
Principais funes da API
Servio com conexo
Servio sem conexo
Portas
Exemplos
Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

Sistemas Distribudos - RMI


Conceitos
Arquitetura
Como funciona
Interface
Implementao
Stubs e Skeletons
Servidor & Cliente
Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

Introduo:
Comunicao e identificao de aplicaes:
porta
20348
porta
20345

porta
10340
porta
15398

TCP

porta
6970

UDP
ssh.cin.ufpe.br
150.161.2.106
procololo = 6
porta = 22

protocolo = 6
protocolo = 17

Internet
host-0-13.re.apartnet.br.inter.net
200.199.75.13

servidor DNS
www.bbc.co.uk
200.185.56.49
212.58.224.61
protocol = 17
protocolo = 17
porta = 53
porta = 44585
Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

www.uol.com.br
200.221.8.18
procololo = 6
porta = 80

INTRODUO

Programao de aplicaes:
Sockets
Estilo: envia/recebe (send/receive)
Caracterstica: eficiente

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

INTRODUO: SOCKET

Interface padro para comunicao entre


processos em redes TCP/IP
Nasceu com o Unix de Berkeley
Os projetistas tentaram usar ao mximo as
chamadas de sistema do Unix
Implementada hoje em vrios SOs
Programar com sockets pode ser visto como
desenvolver um protocolo de aplicao

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

INTRODUO: SOCKET

any port

socket

agreed port
socket
message

client

server
other ports

Internet address = 138.37.94.248

Internet address = 138.37.88.249

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

INTRODUO: SOCKET

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

TIPOS DE SOCKET

Servio com conexo:


Implementa um stream de dados (SOCK_STREAM)
Protocolo TCP (tipicamente)
Servio sem conexo
Implementa um servio de datagramas (SOCK_DGRAM)
Protocolo UDP (tipicamente)
Acessa diretamente a camada de rede (SOCK_RAW)
Servio de baixo nvel
Protocolo IP (tipicamente )

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

PRINCIPAIS FUNES DA API

socket
connect
write
read
close
bind
listen

Cria um novo descritor para comunicao


Iniciar conexo com servidor
Escreve dados em uma conexo
L dados de uma conexo
Fecha a conexo
Atribui um endereo IP e uma porta a um socket

Coloca o socket em modo passivo, para escutar


portas
Bloqueia o servidor at chegada de requisio de
accept
conexo
recvfrom Recebe um datagrama e guarda o endereo do
emissor
Envia um datagrama especificando o endereo
sendto
Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

SOCKET: SERVIOS COM CONEXO (TCP)


Servidor
socket ()
bind ()
listen ()
accept ()
bloqueado

Cliente
socket ()
connect ()
write ()

read ()
write ()
close ()

read ()
close ()

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

SOC KET: SERVIO SEM CONEXO - UDP


Servidor
socket ()
bind ()
recvfrom ()

Cliente
socket ()

bloqueado

sendto ()

sendto ()
close ()

recvfrom ()
close ()

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

NUMEROS DE PORTAS

1-255
256-1023
1-1023

1024-4999
5000-

reservadas para servios padro


portas bem conhecidas
reservado para servios Unix
Somente podem ser usadas
por usurios privilegiados
(super-usurio)
Usadas por processos de
sistema e de usurio
Usadas somente por processos
de usurio
Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

EXEMPLOS: SOCKET EM JAVA


Java modernizou a API para trabalhar com
sockets. O programador no precisa chamar
todas as funes, algumas chamadas so
automticas Exemplos
Socket: equivalente a socket e bind
ServerSocket: equivalente a socket, bind e
listen
Sockets so implementados no pacote java.net
A transmisso e o envio de dados so feitos atravs de classes do
pacote java.io de maneira semelhante escrita e leitura em arquivos
Classes DataInputStream, DataOutputStream, etc.,

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

EXEMPLOS: SOCKET EM JAVA

O cliente cria uma conexo com o socket do servidor (S) e envia


atravs dela uma mensagem ou bye para encerrar para o
servidor. O servidor cria um socket para receber as mensagens dos
clientes e cria uma thread (chamada MinhaThread) para tratar e
responder individualmente cada pedido.

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

EXEMPLOS: SOCKET EM JAVA

Servidor Iterativo

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

SOCKET: SERVIOS COM CONEXO (TCP)

incio

Aguarda pedido

pedido

Trata pedido

resposta
Responde

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

import java.io.*;
CONCORRENCIA
import
java.net.*;
public class SimpleJavaServer {
public static void main(String[] args) {
try {
ServerSocket s = new ServerSocket(9999);
String str;
System.out.println("Server is listening ....");
while (true) {
Socket c = s.accept();
InputStream i = c.getInputStream();
OutputStream o = c.getOutputStream();
do {
byte[] line = new byte[100];
i.read(line);
System.out.println("digite uma palavra para o
cliente...");
o.write(line);
str = new String(line);
} while ( !str.trim().equals("bye") );
c.close();
}
}
Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design
Addison-Wesley Publishers 2000
catch (Exception err){
System.err.println(err);

Edn. 3

EXEMPLOS: SOCKET EM JAVA

Servidor Concorrente

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

SOCKET: SERVIOS COM CONEXO (TCP)

incio
pedido

Aguarda pedido

THREAD

Trata pedido

Trata pedido

responde

resposta

Fim da Thread

responde

resposta

Fim da Thread

........

Trata pedido

........

responde

resposta

Fim da Thread

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleJavaServer {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket s = new ServerSocket(9999);
String str;
System.out.println("Server is listening ....");
while (true) {
Socket c = s.accept();
MinhaThread thread = new MinhaThread(c);
thread.start();
}
} catch (Exception err){
System.err.println(err);
}
Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
}}
Addison-Wesley Publishers 2000

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class MinhaThread extends Thread {
private Socket socket;
private InputStream i;
private OutputStream o;
//private String str;
public MinhaThread(Socket s){
socket = s;
}

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

public void run() {


try {
i = socket.getInputStream();
o = socket.getOutputStream();
byte[] line = new byte[100];
i.read(line);
System.out.println("digite uma palavra para o cliente...");
System.in.read(line);
o.write(line);
socket.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();m}
} // fim do run
}

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

EXEMPLOS: SOCKET EM JAVA

Cliente do servidor iterativo ou


concorrente

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

import java.net.*;
CONCORRENCIA
import
java.io.*;
public class SimpleJavaClient {
public static void main(String[] args) {
try {
Socket s = new Socket("127.0.0.1", 9999);
InputStream i = s.getInputStream();
OutputStream o = s.getOutputStream();
String str;
byte[] line = new byte[100];
System.out.println("digite uma palavra ou bye para
sair");
System.in.read(line);
o.write(line);
i.read(line);
str = new String(line);
System.out.println(str.trim());
s.close();
}
catch (Exception err) {
System.err.println(err);
}
}
}

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

SOCKET COM CONEXO: OBTENDO IP LOCAL

InetAddress ia = null;
try {
ia = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
System.out.println("IP: " + ia.getHostAddress());
System.out.println("Nome: " + ia.getHostName());

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

SOCKET COM CONEXO: OBTENDO IP DO CLIENTE


CONECTADO

try {
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();
InetAddress address = clientSocket.getInetAddress();
} catch (Exception e) {
e.printStackTrace();
}

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

SOCKET : ATIVIDADE

1. Modifique os cdigos do exemplo de tal forma que o servidor ao receber


a mensagem do cliente (uma String) formate e devolva essa mensagem
em letras maisculas
2. Escreva um servidor com a seguinte funcionalidade:
Recebe uma string do cliente
Calcula o tamanho da string

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

SOCKET : ATIVIDADE

1. Com base nos exemplos vistos, implementar uma calculadora distribuda


que efetua as operaes aritmticas bsicas: soma, subtrao, diviso e
multiplicao de dois nmeros inteiros.
2. Os clientes devem informar ao servidor os dois inteiros e o operador
desejado. O servidor recebe os dados do cliente efetua a operao e
informa o resultado para o cliente.

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

Comunicao em Sistemas Distribuidos

RMI
(Remote Method
Invocation)

CONCEITOS:

Applications, services
RMI and RPC
This
chapter

request-reply protocol
marshalling and external data representation
UDP and TCP

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

Middleware
layers

CONCEITOS:

Implementao em Java do RPC (Remote Procedure


Call) Orientado a Objetos
Modelo de objetos distribudos c/ invocao de mtodos
como fundamento
Semntica do modelo de objetos padro
Obtm referncia do objeto remoto
Invoca mtodos diretamente ao objeto remoto
Interface vs. Implementao

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

CONCEITOS:
Um objeto distribudo um componente que pode
interoperar com outros componentes, atravs da rede de
comunicao
Os objetos distribudos possuem as mesmas
caractersticas principais dos objetos das linguagens de
programao O O:
Encapsulamento,
Polimorfismo e
Herana;
Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

CONCEITOS:
Referncia de objetos: Usado para fazer referncia para qualquer
chamada a um mtodo
Interfaces: Define os mtodos, tipos dos argumentos, tipos de
retornos e excees, sem especificar sua implementao
Uma interface s pode conter mtodos pblicos e abstratos (os prefixos
abstract e public so em geral omitidos).
Uma interface pode conter variveis, mas elas devem ser estticas
(static) e finais (final).
Uma interface implementada com a palavra chave implements.
Uma interface no pode ser instanciada (no pode criar objetos com new )

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

CONCEITOS:
Interface vs. Implementao: Objeto remoto e interface remoto

remote object
Data

remote
interface

m1
m2
m3

implementation
of methods

m4
m5
m6

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

ARQUITETURA

obj.met( )

public void met( ) { ... }

stub

skeleton

TCP/IP

compilador RMI (rmic) gera stub e skeleton


Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

ARQUITETURA

Stub:
um protocolo do lado do cliente
identifica o objeto e os mtodos invocados
Skeleton
protocolo do lado do servidor
Invoca o mtodo do objeto apropriado
A questo dos sistemas distribudos :
Como o servidor se faz conhecer (publicao)
Como o cliente acha um servidor (descoberta)

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

COMO FUNCIONA
1.

Servidor de registro

2.
3.

stub

5.

servidor

cliente

7
5

4.

6.

Servidor se registra com um


nome no servidor de registro.
Cliente pede uma referncia
do objeto servidor.
Servidor de registro retorna
uma referncia do objeto
servidor.
Cliente manda atravs do
stub uma msg para o
servidor.
Stub abre uma conexo com
o skeleton do servidor.
Skeleton recebe o pedido e
chama o mtodo solicitado.

skeleton
8

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

COMO FUNCIONA
7.

Servidor de registro

servidor

cliente
9

stub

Skeleton recebe a resposta do


servidor
8. Skeleton encaminha a resposta
para o stub
9. Stub recebe a resposta
10. Stub retorna a resposta para o
cliente.

skeleton
8

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

OBJETO
Descrio de Objetos:
Objeto implementa uma interface
Objeto remoto implementa a interface remote (java.rmi)
Objeto passado por referncia implementa Serializable (java.io)
A representao dos objetos transparente e automtica graa
ao mtodo de serializao (transformao do objeto em
fluxo de bytes

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

USANDO RMI

Um sistema RMI composto de vrias partes:


Definio das interfaces para os servios remotos (Que mtodos sero
chamados remotamente)
Implementaes dos servios remotos ( Implementar
interfaces em objetos servidores)
Implementar o cliente
Criar os arquivos de Stub e Skeletons
Um servidor para hospedar os servios remotos
Um servio de RMI Naming que permite o cliente achar os
servios remotos
Um provedor de arquivos de classes (servidor http ou ftp)
Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

USANDO RMI

Exemplo Prtico

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

USANDO RMI Definindo Interface:


import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Mensageiro extends Remote {
public void enviarMensagem( String msg ) throws
RemoteException;
public String lerMensagem() throws
RemoteException;
}

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

USANDO RMI Implementando Interface:


import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class MensageiroImpl extends UnicastRemoteObject
implements Mensageiro {
public MensageiroImpl() throws RemoteException {
super();
}
public void enviarMensagem(String msg) throws
RemoteException {
// TODO Auto-generated method stub
System.out.printf("\n%s", msg );
}
@Override
public String lerMensagem() throws RemoteException {
// TODO Auto-generated method stub
return "This is not a Hello World! message";
}
}
Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

USANDO RMI :Implementando Servidor


import
import
public
public

java.rmi.Naming;
java.rmi.registry.LocateRegistry;
class ServerObjetos {
static void main(String[] args){
System.out.print("Servidor ativo...");
new ServerObjetos();

}
public ServerObjetos(){
try {
Mensageiro objeto1 = new MensageiroImpl();
//registra o servidor pela porta 9999, evitando de
//faze-lo no console usando RMIC
LocateRegistry.createRegistry(9999);
Naming.rebind("rmi://localhost:9999/MensageiroService"
, objeto1);
}catch( Exception e ) { System.out.println(" Erro: " +
e );}
}}

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

USANDO RMI :Implementando Cliente


import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
public class MensageiroClient {
public static void main(String[] args) {
Mensageiro objeto1 = null;
try {
//obter uma referncia para objeto servidor
LocateRegistry.getRegistry("192.168.0.102");
objeto1 = (Mensageiro)
Formam uma nica linha
Naming.lookup("rmi://localhost:9999/MensageiroService"
);
objeto1.enviarMensagem( "Hello World!" );
} catch (MalformedURLException |
Formam uma nica linha
RemoteException | NotBoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("problema de
conexo");
}
}
}
Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

USANDO RMI : Executando

Execute o servidor: MensageiroServer


Execute o cliente: MensageiroClient
Observa o resultado

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

RMI : ATIVIDADE

1. Modifique os cdigos do exemplo de tal forma que o servidor ao receber


a mensagem do cliente (uma String) formate e devolva essa mensagem
em letras maisculas
2. Escreva um servidor com a seguinte funcionalidade:
Recebe uma string do cliente
Calcula o tamanho da string
Calcula o numero de vezes que cada caractere da string repetido
Devolve para o cliente os resultados dos clculos efetuados

Instructors Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 3
Addison-Wesley Publishers 2000

REFERENCIAS BIBLIOGRAFICAS
COULOURIS, G et al; Sistemas Distribudos Conceitos e Projetos, 4. Edio,
Bookman, 2007
TANENBAUM, Andrew S, STEEN, Martenvan; Sistemas distribudos: princpios e
paradigmas, Pearson Prentice Hall, 2007
COULOURIS, DOLLIMORE and KINDBERG; Distributed Systems: Concepts and
Design, Edition 3, Addison-Wesley 2001
KARAM, D. J. Modelo de negocio para mobilidade e interatividade em ambientes
convergentes heterogneos. 2006, 80p tese (Doutorado) - Escola Politcnica,
Universidade de So Paulo, So Paulo, 2006.
ITU 2004 International Telecommunication Union Year 2001, General Overview of
NGN, 2004