Você está na página 1de 34

Sistemas Distribuídos e Paralelos

Aula IV – Comunicação entre Processos

Prof. Engº. Daniel Nvula Kasso


1
SUMÁRIO

❑Introdução
❑Características da comunicação entre processos
❑Sockets
❑Comunicação por Fluxo
❑Comunicação por datagrama UDP

2
BIBLIOGRAFIA

Deitel, Paul e Deitel, Harvey. 2017. Java Como


Programar. [trad.] Edson Furmankiewicz. 8ª. São Paulo
: Pearson Education do Brazil, 2017. cap. 27.
Coulouris, George, Dollimore, Jean e Kindberg, Tim.
2007. Sistemas Distribuídos. Conceitos e Projeto.
Bookman, 2007. cap. 4. pág. 127-136.

3
INTRODUÇÃO

4
CARACTERÍSTICAS DA COMUNICAÇÃO
ENTRE PROCESSOS

Para que um processo se comunique com outro, um


deles envia (send) uma mensagem (uma sequência de
bytes) para um destino e outro processo, no destino,
recebe (receive) a mensagem. Isso pode implicar na
sincronização dos dois processos.

5
CARACTERÍSTICAS DA COMUNICAÇÃO
ENTRE PROCESSOS

Comunicação síncrona e assíncrona


Os processos remetentes fazem as mensagens serem
adicionadas em filas remotas e os processos destino
removem mensagens de suas filas locais.
Comunicação síncrona
Os processos remetente e destino são sincronizados a
cada mensagem. Quando um envio (send) é feito, o
processo remetente (ou thread) é bloqueado até que a
recepção (receive) correspondente seja realizada.

6
CARACTERÍSTICAS DA COMUNICAÇÃO
ENTRE PROCESSOS

Comunicação assíncrona
O processo remetente pode prosseguir assim que a
mensagem tenha sido copiada para um buffer local, e a
mensagem tenha sido copiada para um buffer local, e a
transmissão da mensagem ocorre em paralelo com o
processo remetente. A operação receive pode ter
variantes com e sem bloqueio.

7
CARACTERÍSTICAS DA COMUNICAÇÃO
ENTRE PROCESSOS

Destinos de mensagem
As mensagens são enviadas para destinos identificados
pelo par (endereço IP, porta local).

8
CARACTERÍSTICAS DA COMUNICAÇÃO
ENTRE PROCESSOS

Confiabilidade
Uma comunicação é confiável em termos de validade e
integridade.
No que diz respeito à propriedade da validade, um
serviço de mensagem ponto a ponto pode ser descrito
como confiável se houver garantia que as mensagens
forem entregues, independentemente de um número
razoável de pacotes que possam ter sido eliminados ou
perdidos.
Quanto à integridade, as mensagens devem chegar
não corrompidas e sem duplicação.
9
CARACTERÍSTICAS DA COMUNICAÇÃO
ENTRE PROCESSOS

Ordenamento
Algumas aplicações exigem que as mensagens sejam
entregues na ordem de emissão-isto é, na ordem em
que foram transmitidas pelo remetente. A entrega de
mensagens fora da ordem do remetente é considerada
uma falha por tais aplicações.

10
SOCKETS

As duas formas de comunicação (UDP e TCP) usam a


abstração de socket, um ponto de destino para a
comunicação entre processos.

11
SOCKETS

A comunicação entre processos consiste em transmitir


uma mensagem entre um socket de um processo e um
socket de outro processo. Para que um processo receba
mensagens, seu socket deve estar vinculado a uma
porta local e a um dos endereços IP do computador em
que é executado.
Os processos podem usar o mesmo socket para enviar
e receber mensagens.

12
SOCKETS

Cada socket é associado a um protocolo em


patricular-UDP e TCP.
Java fornece uma classe, InetAddress, que representa
endereços IP, para permitir a utilização dos protocolos
TCP e UDP.
As instâncias de InetAddress que contêm endereços IP
podem ser criadas pela chamada ao método estático
InetAddress, fornecendo-se um nome de host DNS
como argumento. O método usa DNS para obter o
endereço IP correspondente.
InetAddress aComputer =
InetAddress.getByName("D.N.Kasso");
13
GRUPOS DE NÚMEROS DE PORTA

Portas bem conhecidas (Números de 0 a 1023) -


Esses números estão reservados para serviços e
aplicações.
Portas registradas (Números de 1024 a 49151) -
Estes números de portas são designados pela IANA
para uma entidade solicitante usar com aplicações ou
processos específicos.
Portas Dinâmicas ou Privadas (Números 49152 a
65535) - São geralmente designadas dinamicamente
pelo sistema operacional do cliente, quando a conexão
para um serviço se inicia.
14
COMUNICAÇÃO POR FLUXO

As seguintes características da rede são ocultas pela


abstração de fluxo:

▪ Tamanho das mensagens: o aplicativo pode escolher o


volume de dados que vai ser enviado ou recebido em um
fluxo.
▪ Mensagens perdidas: o protocolo TCP usa um esquema
de confirmação.
▪ Controle de fluxo: o protocolo TCP tenta combinar a
velocidade dos processos que lêem e escrevem em um
fluxo. Se o processo que escreve (envia) for rápido demais
para o que lê, então ele será bloqueado até que o leitor
tenha consumido dados suficientes.
15
COMUNICAÇÃO POR FLUXO

As seguintes características da rede são ocultas pela


abstração de fluxo:
▪ Duplicação e ordenamento de mensagens:
identificadores de mensagem são associados a cada
pacote IP, o que permite ao destinatário detectar e rejeitar
duplicatas ou ordenar as mensagens que chegam foram
da ordem de emissão.
▪Destinos de mensagem: dois processos que estão em
comunicação estabelecem uma conexão antes de
poderem se comunicar por meio de um fluxo, sem
necessidade de usar endereços IP e portas.

16
COMUNICAÇÃO POR FLUXO

Para estabelecer um servidor simples utilizando sockets


de fluxo em Java requer cinco etapas:
Etapa 1: Cria um ServerSocket
Uma chamada para o construtor do ServerSocket, como
ServerSocket server = new
ServerSocket(NumeroDaPorta, comprimentoDaFila);
registra um número de porta TCP disponível e especifica o
número máximo de clientes que podem esperar para se
conectar ao servidor.
17
COMUNICAÇÃO POR FLUXO

Para estabelecer um servidor simples utilizando sockets


de fluxo em Java requer cinco etapas:
Etapa 2: Espera uma conexão
O servidor escuta indefinidamente (ou bloquear) para uma
tentativa de um cliente se conectar.
Para ouvir uma conexão de cliente, o programa chama o
método ServerSocket aceitar, como em
Socket conexao = new server. accept();
que retorna um Socket quando uma conexão com um
cliente é estabelecida. O Socket permite que o servidor
interaja com o cliente.
18
COMUNICAÇÃO POR FLUXO

Para estabelecer um servidor simples utilizando


sockets de fluxo em Java requer cinco etapas:
Etapa 3: Obter os fluxos de E/S do Socket
Obter os objetos OutputStream e InputStream que
permitem que o servidor se comunique com o cliente
enviando e recebendo bytes.
O servidor envia informações ao cliente via um
OutputStream e recebe informações do cliente via um
InputStream.

19
COMUNICAÇÃO POR FLUXO

Para estabelecer um servidor simples utilizando sockets


de fluxo em Java requer cinco etapas:
Etapa 3: Obter os fluxos de E/S do Socket
▪ O servidor invoca o método getOutputStream no Socket
para obter uma referência ao OutputStream do Socket e
▪ Invoca o método getInputStream no Socket para obter
uma referência ao InputStream do Socket.
▪Os objectos fluxo podem ser utilizados para enviar ou
receber bytes individuais ou sequências de bytes com o
método write de OutputStream e com o método read de
InputStream, respectivamente. 20
COMUNICAÇÃO POR FLUXO

Para estabelecer um servidor simples utilizando sockets


de fluxo em Java requer cinco etapas:
Etapa 3: Obter os fluxos de E/S do Socket
Muitas vezes, é útil enviar ou receber valores de tipos
primitivos (por exemplo, int e double) ou Objetos
serializáveis (por exemplo, Strings ou outros tipos
serializáveis) em vez de enviar bytes.

21
COMUNICAÇÃO POR FLUXO

Para estabelecer um servidor simples utilizando sockets


de fluxo em Java requer cinco etapas:
Etapa 3: Obter os fluxos de E/S do Socket
Nesse caso, podemos usar as técnicas para empacotar
outros tipos de fluxo (por exemplo, ObjectOutputStream
e ObjectInputStream) em torno do OutputStream e
InputStream associados ao Socket.
ObjectInputStream input = new
ObjectInputStream(conexao.getInputStream());

ObjectOutputStream output = new


ObjectOutputStream(conexao.getOutputStream()); 22
COMUNICAÇÃO POR FLUXO

Para estabelecer um servidor simples utilizando


sockets de fluxo em Java requer cinco etapas:
Etapa 3: Obter os fluxos de E/S do Socket
DataInputStream e DataOutputStream permitem
representações binárias de tipos de dados primitivos
serem lidas e escritas de forma independente de
máquina.

23
COMUNICAÇÃO POR FLUXO

Para estabelecer um servidor simples utilizando


sockets de fluxo em Java requer cinco etapas:
Etapa 4: Realiza o processamento
Fase de processamento, no qual o servidor e o cliente
se comunicam via objectos OutputStream e
InputStream ter os fluxos de E/S do Socket.

24
COMUNICAÇÃO POR FLUXO

Para estabelecer um servidor simples utilizando sockets


de fluxo em Java requer cinco etapas:
Etapa 5: Fecha a conexão
● Quando a transmissão está completa, o servidor fecha
a conexão invocando o método close nos fluxos
e no Socket.

25
COMUNICAÇÃO POR FLUXO

Para estabelecer um cliente simples utilizando sockets


de fluxo em Java requer quatro etapas:
Passo 1: Cria um Socket para conectar ao servidor
Socket conexao = new
Socket(enderecoDoServidor, porta);
Se a tentativa de conexão for bem-sucedida, essa
instrução retorna um Socket.

26
COMUNICAÇÃO POR FLUXO

Para estabelecer um cliente simples utilizando sockets


de fluxo em Java requer quatro etapas:
Passo 2: Obtém os fluxos de E/S do Socket
Passo 3: Realiza o processamento
Passo 4: Fecha a conexão

27
COMUNICAÇÃO POR DATAGRAMA UDP

Um datagrama enviado pelo protocolo UDP é


transmitido de um processo para outro sem a
existência de confirmações ou novas tentativas de
envio.
Se ocorrer uma falha, a mensagem poderá não
chegar.

28
COMUNICAÇÃO POR DATAGRAMA UDP

API Java fornece comunicação por datagrama por


meio de duas classes: DatagramaPacket e
DatagramaSocket.
DatagramaPacket: fornece um construtor (para ser
usado no envio) para uma instância composta por um
vetor de bytes (mensagem), o comprimento da
mensagem, o endereço IP e o número da porta local
do socket de destino:
DatagramPacket packetSend = new
DatagramPacket(dataSend, dataSendLength,
IPAddress, portNumber);
29
COMUNICAÇÃO POR DATAGRAMA UDP

DatagramaPacket
Fornece outro construtor para ser usado na recepção de
mensagens. Seus argumentos especificam um vector de
bytes, para armazenamento da mensagem a ser recebida,
e seu comprimento:
DatagramPacket packetRec = new
DatagramPacket(dataReceive, dataReceiveLength);
A mensagem pode ser recuperada do DatagramaPacket
por meio do método getData. Os métodos getPort e
getAddress acessam a porta e o endereço IP.

30
COMUNICAÇÃO POR DATAGRAMA UDP

DatagramSocket
Fornece:
▪ Mecanismos para criação de sockets para envio e
recepção de datagramas UDP.
▪ Um construtor que recebe como argumento um
número de porta, para processos que precisam
utilizar uma porta em particular, e um construtor sem
argumentos que permite a obtenção dinâmica de um
número de porta.

31
COMUNICAÇÃO POR DATAGRAMA UDP

DatagramSocket fornece métodos que incluem os


seguintes:
▪ send e receive: servem para transmitir datagramas
entre dois sockets. O argumento de send é uma
instância de DatagramPacket contendo uma
mensagem e seu destino. O argumento receive é um
DatagramPacket vazio para receber a mensagem,
seu comprimento e origem.
▪ connect: é usado para contactar uma porta remota e
um endereço IP em particular, no caso em que um
socket seja capaz apenas de enviar e receber
mensagens desse endereço.
32
CONCLUSÃO

33
Sistemas Distribuídos e Paralelos

Aula IV – Comunicação entre Processos

Prof. Engº. Daniel Nvula Kasso


34

Você também pode gostar