Anda di halaman 1dari 23

Comunicao

Sistemas Distribudos
Cludia Ribeiro
Introduo
Comunicao entre processos o corao de todo sistema
distribudo
baseada em troca de mensagem atravs da rede
Mecanismos de comunicao podem ser: sncronos ou
assncronos
Exemplos de modelos de comunicao:
Sncrono:RPC, RMI, Stream, WS
Assncrono:MOM
2
Protocolos de Comunicao
A comunicao em sistemas de distribudos
representa um nvel de abstrao acima dos
protocolos que efetivamente transportam
mensagens na Internet
Considerando o modelo OSI (7 camadas), o
Middleware representa as camadas de sesso
e apresentao, ou seja:
Acima da camada de Transporte
Abaixo da camada de Aplicao
3
Modelo em Camadas
(Referncia)
Application
Presentation
Session
Transport
Network
Data link
Physical
Message sent
Message received
Sender Recipient
Layers
Communication
medium
4
M
i
d
d
l
e
w
a
r
e

Colouris
Modelo Internet
(Implementao)
Underlying network
Application
Network interface
Transport
Internetwork
Internetwork packets
Network-specific packets
Message
Layers
Internetwork
protocols
Underlying
network
protocols
5
Colouris
Viso Conceitual de
Programao Internet
IP
Application Application
TCP UDP
6
A
P
I

S
o
c
k
e
t

A
P
I

S
o
c
k
e
t

API Socket permite transformar o canal de comunicao em um dispositivo
de entrada/sada a ser utilizado pela aplicao

Representa a forma mais elementar (baixo nvel) de comunicao em aplicaes
Distribudas na Internet
Comunicao atravs de
Socket
Sockets so explicitamente criados, usados e liberados
pelas aplicaes
So controlados como recursos pelo sistema
operacional
Baseado no paradigma cliente/servidor
Tipos de servio de transporte via socket:
Confivel, orientado a cadeias de bytes (TCP)
Datagrama no confivel (UDP)
7
Comunicao
Mecanismo de baixo nvel
Programao de Sockets
TCP
9
processo
TCP com
buffers,
variveis
socket
controlado pelo
criador da aplicao
controlado pelo
sistema
operacional
host ou
servidor
processo
TCP com
buffers,
variveis
socket
host ou
servidor
internet
controlado pelo
criador da aplicao
controlado pelo
sistema
operacional
Programao de Sockets
TCP
10
Cliente deve contactar o servidor
processo servidor j deve estar
executando antes de ser contactado
servidor deve ter criado socket (porta)
que aceita o contato do cliente
Cliente contata o servidor atravs de:
criando um socket TCP local
especificando endereo IP e nmero da
porta do processo servidor
Quando o cliente cria o socket:
cliente TCP estabelece conexo com
o TCP do servidor
Quando contactado pelo cliente:
o TCP do servidor cria um novo
socket para o processo servidor
comunicar-se com o cliente
permite o servidor conversar com
mltiplos clientes
TCP fornece a transferncia confivel, em ordem de
bytes (pipe) entre o cliente e o servidor
ponto de vista da aplicao
Exemplo de aplicao
cliente-servidor
11
cliente l linha da entrada padro
do sistema (inFromUser stream)
envia para o servidor via socket
(outToServer stream)
servidor l linha do socket
servidor converte linha para letras
maisculas e envia de volta ao
cliente
cliente l a linha modificada
atravs do (inFromServer
stream)
o
u
t
T
o
S
e
r
v
e
r

para rede da rede
i
n
F
r
o
m
S
e
r
v
e
r

i
n
F
r
o
m
U
s
e
r

teclado monitor
Process
clientSocket
input
stream
input
stream
output
stream
TCP
socket
stream de sada:
seqncia de bytes
para fora do processo
processo
cliente
TCP socket
cliente
Interao Cliente/Servidor
TCP
12
espera por pedido
de conexo entrante
connectionSocket =
welcomeSocket.accept()
cria socket,
port=x, para
solicitao entrante:
welcomeSocket =
ServerSocket()
cria socket,
conecta com hostid, port=x
clientSocket =
Socket()
fecha
connectionSocket
l resposta de
clientSocket
fecha
clientSocket
Servidor (executando em hostid)
Cliente
envia pedido usando
clientSocket l pedido de
connectionSocket
escreve resposta para
connectionSocket
TCP
estabel. de conexo
Exemplo: cliente Java (TCP)
13
import java.io.*;
import java.net.*;
class TCPClient {

public static void main(String argv[]) throws Exception
{
String sentence;
String modifiedSentence;

BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));

Socket clientSocket = new Socket("hostname", 6789);

DataOutputStream outToServer =
new DataOutputStream(clientSocket.getOutputStream());


Cria
stream de entrada
Cria
socket cliente,
conecta ao servidor
Cria
stream de sada
ligado ao socket
Exemplo: cliente Java (TCP),
cont.
14
BufferedReader inFromServer =
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));

sentence = inFromUser.readLine();

outToServer.writeBytes(sentence + '\n');

modifiedSentence = inFromServer.readLine();

System.out.println("FROM SERVER: " + modifiedSentence);

clientSocket.close();

}
}
Cria
stream de entrada
ligado ao socket
Envia linha
para o servidor
L linha
do servidor
Exemplo: servidor Java (TCP)
15
import java.io.*;
import java.net.*;

class TCPServer {

public static void main(String argv[]) throws Exception
{
String clientSentence;
String capitalizedSentence;

ServerSocket welcomeSocket = new ServerSocket(6789);

while(true) {

Socket connectionSocket = welcomeSocket.accept();

BufferedReader inFromClient =
new BufferedReader(new
InputStreamReader(connectionSocket.getInputStream()));


Cria
socket de aceitao
na porta 6789
Espera, no socket
de aceitao por
contato do cliente
Cria stream de
entrada, ligado
ao socket
Exemplo: servidor Java (cont)
16


DataOutputStream outToClient =
new DataOutputStream(connectionSocket.getOutputStream());

clientSentence = inFromClient.readLine();

capitalizedSentence = clientSentence.toUpperCase() + '\n';

outToClient.writeBytes(capitalizedSentence);
}
}
}

L linha do
socket
Cria stream de
sada, ligado ao
socket
Escreve linha
para o socket
Fim do while loop,
retorne e espere por
outra conexo do cliente
Programao de Sockets
UDP
17
UDP: no h conexo entre o cliente e o servidor
no existe apresentao
transmissor envia explicitamente endereo IP e porta de destino
em cada mensagem
servidor deve extrair o endereo IP e porta do transmissor de
cada datagrama recebido
UDP: dados transmitidos podem ser recebidos foram de ordem
ou perdidos
ponto de vista da aplicao
UDP fornece a transferncia no confivel de
grupos de bytes (datagramas) entre o cliente e
o servidor

Interao Cliente/Servidor
UDP
18
fecha
clientSocket
Servidor (executando hostid)
l resposta de
clientSocket
cria socket,

clientSocket =
DatagramSocket()
Cliente
Cria, endereo (hostid, port=x,
envia datagrama de pedido
usando clientSocket
cria socket,
port=x, para
solicitao entrante:
serverSocket =
DatagramSocket()
l pedido de:
serverSocket
escreve resposta para
serverSocket
especificando endereo
do host cliente e
nmero da porta
Exemplo: cliente Java (UDP)
19
s
e
n
d
P
a
c
k
e
t

para rede da rede
r
e
c
e
i
v
e
P
a
c
k
e
t

i
n
F
r
o
m
U
s
e
r

teclado monitor
Process
clientSocket
pacote
UDP
stream
de entrada
pacote
UDP
UDP
socket
Sada: envia pacote
(TCP envia byte
stream)
Entrada: recebe
pacote (TCP recebe
byte stream)
processo
cliente
socket UDP
cliente
Exemplo: cliente Java (UDP)
20
import java.io.*;
import java.net.*;

class UDPClient {
public static void main(String args[]) throws Exception
{

BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));

DatagramSocket clientSocket = new DatagramSocket();

InetAddress IPAddress = InetAddress.getByName("hostname");

byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];

String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
Cria
stream de entrada
Cria
socket cliente
Translada
nome do host para
endereo IP
usando DNS
Exemplo: cliente Java (UDP),
cont.
21
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress, 9876);

clientSocket.send(sendPacket);

DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);

clientSocket.receive(receivePacket);

String modifiedSentence =
new String(receivePacket.getData());

System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
}
Cria datagrama com
dados a enviar,
tamanho, endereo IP
porta

Envia datagrama
para servidor
L datagrama
do servidor
Exemplo: servidor Java (UDP)
22
import java.io.*;
import java.net.*;

class UDPServer {
public static void main(String args[]) throws Exception
{

DatagramSocket serverSocket = new DatagramSocket(9876);

byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];

while(true)
{

DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
Cria
socket datagrama
na porta 9876
Cria espao para
datagramas recebidos
Recebe
datagrama
Exemplo: servidor Java, (cont.)
23

String sentence = new String(receivePacket.getData());

InetAddress IPAddress = receivePacket.getAddress();

int port = receivePacket.getPort();

String capitalizedSentence = sentence.toUpperCase();

sendData = capitalizedSentence.getBytes();

DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress,
port);

serverSocket.send(sendPacket);
}
}
}
Obtm endereo IP
e nmero da porta
do transmissor
Escreve o
datagrama para
dentro do socket
Termina o while loop,
retorna e espera por
outro datagrama
Cria datagrama
para enviar ao cliente

Anda mungkin juga menyukai