Escolar Documentos
Profissional Documentos
Cultura Documentos
Distribuídos - Aplicação
Prof. Carlos Wagner
Introdução
● Comunicação cliente-servidor
● O software do servidor está sendo executado
continuamente na máquina remota, aguardando
qualquer rede tráfego que deseja estabelecer alguma
comunicação
● Tome com exemplo o seguinte comado:
● telnet time-a.nist.gov 13
● Qual o resultado ?
Introdução
● Quando o sistema operacional no computador remoto
recebe um pacote de rede que contém uma solicitação
para se conectar à porta número 13, o servidor
de atendimento processa e estabelece a conexão.
● A conexão permanece ativa até rescindido por
uma das partes.
Introdução
● Quando iniciada a sessão de telnet com time-a.nist.gov na porta
13, um pedaço de rede software sabia o suficiente para
converter a string "time-a.nist.gov" em seu protocolo de Internet
correto Endereço (IP), 129.6.15.28.
● O software telnet enviou uma solicitação de conexão para
esse endereço, solicitando uma conexão à porta 13.
● Depois que a conexão foi estabelecida, o programa remoto
enviou de volta uma linha de dados e fechou a conexão.
● Em geral, é claro, clientes e servidores iniciar um diálogo
mais extenso antes que um ou outro feche a conexão.
● Ex: telnet horstmann.com80
Soquetes
● As mensagens enviadas para um endereço IP e
um número de porta em particular só podem ser
recebidas por um processo cujo soquete esteja
associado a esse endereço IP e a esse número de
porta.
● Um processo pode usar o mesmo soquete para enviar
e receber mensagens.
● Qualquer processo pode fazer uso de várias
Ex:
Cliente Servidor
Outras portas
IP = 192.168.0.10 IP = 172.16.20.50
Soquetes
● Considerações TCP (Transmission Control Protocol -
Protocolo de Controle de Transmissão)
● Tamanho das mensagens: o aplicativo pode escolher
o volume de dados que vai ser enviado ou recebido
em um fluxo. Ele pode lidar com conjuntos de dados muito
pequenos ou muito grandes.
● Mensagens perdidas: o protocolo TCP usa um esquema
de confirmação. Como um simples exemplo desses
esquemas (não é o usado no TCP), o lado remetente
mantém um registro de cada datagrama IP enviado, e
o lado destino confirma todas as chegadas
Soquetes
● Considerações TCP
● 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ê (recebe), então
ele será bloqueado até que o leitor tenha consumido
dados suficientes.
● Duplicação e ordenamento de mensagens:
identificadores de mensagem são associados a
cada datagrama IP, o que permite ao destinatário
detectar e rejeitar duplicatas ou reordenar as
mensagens que chegam fora da ordem de emissão.
Soquetes
● Considerações TCP
● 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.
● Uma vez estabelecida a conexão, os processos
simplesmente leem ou escrevem no fluxo, sem
necessidade de usar endereços IP e portas.
Soquetes – API Java
● A interface Java para fluxos TCP é fornecida
pelas classes ServerSocket e Socket.
● ServerSocket: esta classe se destina a ser usada
por um servidor para criar um soquete em uma
porta de serviço para receber requisições de connect
dos clientes.
● Seu método accept recupera um pedido connect da
fila ou, se a fila estiver vazia, bloqueia até que chegue
um.
● O resultado da execução de accept é uma instância
de Socket – um soquete para dar acesso aos fluxos
para comunicação com o cliente.
Soquetes – API Java
● A interface Java para fluxos TCP é fornecida pelas classes
ServerSocket e Socket.
● Socket:esta classe é usada pelos dois processos de uma
conexão.
● O cliente usa um construtor para criar um soquete,
especificando o nome DNS do host e a porta do
servidor.
● Esse construtor não apenas cria um soquete associado
a uma porta local, mas também o conecta com o
computador remoto e com o número de porta especificado.
● Ele pode causar uma exceção UnknownHostException,
caso o nome de host esteja errado, ou uma exceção
IOException, caso ocorra um erro de E/S.
Soquetes – API Java
● A classe Socket fornece os métodos getInputStream
e getOutputStream para acessar os dois fluxos
associados a um soquete.
● Os tipos de retorno desses métodos são InputStream
e OutputStream, respectivamente – classes abstratas
que definem métodos para ler e escrever os bytes.
● Os valores de retorno podem ser usados como
argumentos de construtores para fluxos de
entrada e saída.
Soquetes – API Java
Soquetes – API Java
● Ex: Classe Socket
● Considerações:
● Sockets=new Socket("time-a.nist.gov",13);
● A primeira linha abre um soquete, que é uma
abstração de software de rede que permite
comunicação dentro e fora deste programa.
● Passamos o endereço remoto e o número da porta
para o construtor de soquete.
Soquetes – API Java
● Ex: Classe Socket
● Considerações:
● InputStream inStream=s.getInputStream();
● Uma vez aberto o soquete, o método
getInputStream em java.net.Socket retorna um Objeto
InputStream que você pode usar como qualquer outro
fluxo.
● Depois de pegar o stream, esse programa
simplesmente imprime cada linha de entrada na saída
padrão. Esse processo continua até o fluxo terminar e
o servidor desconectar.
Soquetes – API Java
● java.net.Socket
● Considerações:
● Socket(Stringhost,int port) : Construtor com host e
porta
● InputStream getInputStream()
● OutputStream getOutputStream()
● InputStream : leitura
● OutputStream : escrita
Soquetes – API Java
Servidor TCP JAVA
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);
System.out.println("ponto1");
Socket connectionSocket = welcomeSocket.accept();
while (true) {
System.out.println("ponto2");
connectionSocket.getInputStream()
)
);
Soquetes – API Java
Servidor TCP JAVA
DataOutputStream outToClient = new DataOutputStream(
connectionSocket.getOutputStream()
);
System.out.println("ponto3");
clientSentence = inFromClient.readLine();
System.out.println("ponto4");
class TCPClient {
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
clientSocket.close();
}
}
Threads
● “Quando dizemos que duas tarefas operam
concorrentemente, queremos dizer que ambas
progridem ao mesmo tempo.”
● “Quando dizemos que duas tarefas operam em
paralelo, queremos dizer que elas são executadas
simultaneamente.”
● “Nesse sentido, o paralelismo é um subconjunto
da concorrência.”
Threads
● “Programas Java podem ter várias threads de
execução, em que cada thread tem sua própria pilha
de chamadas de método e seu próprio contador de
programa, permitindo que seja executada
concorrentemente com outras threads enquanto
compartilha os recursos de nível de aplicativo
como memória e handles de arquivo.”
● Essa capacidade é chamada multithreading.
Threads
● Criando Threads
● Existem duas formas de criar explicitamente um
thread em Java:
● Estendendo a classe Thread e instanciando um objeto
desta nova classe.
● Implementando a interface Runnable, Runnable , e
passando um objeto desta nova classe como
argumento do construtor da classe Thread.
● Nos dois casos a tarefa a ser executado pelo
thread deverá ser descrita pelo método run() .
Comunicação por datagrama - UDP
class UDPServer {
public static void main(String args[]) throws Exception {
while (true) {
clientSocket.receive(receivePacket);
System.out.println("Pacote UDP recebido...");