Anhaguera

Disponível somente no TrabalhosFeitos
  • Páginas : 6 (1441 palavras )
  • Download(s) : 0
  • Publicado : 9 de abril de 2012
Ler documento completo
Amostra do texto
Comunicação Distribuída

Sockets
Um socket é definido como uma extremidade de um canal de comunicação. Um par de processos (ou threads) se comunica em uma rede utilizando um par de sockets, sendo uma para cada processos. Um socket é formado por um endereço IP conectado com um número de porta. Em geral utilizam uma arquitetura cliente-servidor.
Servidores que implementam serviços específicos,ouvem portas bem conhecidas (por exemplo, um servidor telnet ouve a porta 23, um servidor FTP, ouve a porta 21, um servidor web ouve a porta 80). Todas as portas abaixo de 1024 são consideradas bem conhecidas – podemos usá-las para implementar serviços padrões.
Quando uma thread cliente inicia um pedido de conexão, ela recebe uma porta atribuída pelo host. Essa porta tem um número arbitrário >1024.
Por exemplo, se um cliente no host X com endereço IP 146.86.5.20 desejar estabelecer uma conexão com um servidor web no endereço 161.25.19.8, o host X poderá receber a porta 1625 (por exemplo). A conexão consistirá então em um par de sockets: 146.86.5.20:1625 no host X e 161.25.19.8:80 no servidor web.
Todas as conexões devem ser exclusivas.

Exemplo: Servidor de data e hora
Programasimples que obtém informações de data e hora de um servidor remoto.

O servidor:

import java.net.*;
public class Servidor {
public Servidor(){
try {
s = new ServerSocket(5155); //cria o socket
}
catch (java.io.IOException e) {
System.out.println(e);
System.exit(1);
}

System.out.println(“Servidor escutando. . . “);
try {
while (true) {
cliente =s.accept();
c = new Conexao(cliente);
c.start();
}
}
catch (java.io.IOException e) {
System.out.println(e);
}
}

public static void main(String args[]) {
Servidor data_e_hora = new Servidor();
}

private ServerSocket s;
private Socket cliente;
private Conexao c;
}

A thread para atender o pedido de data e hora:

import java.net.*;
importjava.io.*;

public class Conexao extends Thread {
public Conexao(Socket s) {
outputLine = s;
}
public void run() {
try {
PrintWriter pout = new PrintWriter
(outputLine.getOutputStream(),true);
pout.println(“A data e a hora são: “ +
new java.util.date().toString() );
outputLine.close();
}
catch (java.io.IOException e) {
System.out.println(e);
}
}
privateSocket outputLine;
}

O cliente:

import java.net.*;
import java.io.*;

public class Cliente {
public Cliente() {
try {
Socket s = new Socket(“127.0.0.1”,5155);
InputStream in = s.getInputStream();
BufferedReader bin = new BufferedReader
(new InputStreamReader(in));
System.out.println(bin.readLine());
s.close();
}
catch (java.io.IOException e) {System.out.println(e);
System.exit(1);
}
}

public static void main(String args[]) {
Cliente cliente = new Cliente();
}
}

Chamadas de Procedimento Remoto (RPC)

A comunicação usando sockets – embora comum e eficiente – é considerada uma forma de comunicação de baixo nível entre processos distribuídos. Um dos motivos é que os sockets só permitem a troca de um fluxonão-estruturado de bytes entre threads em comunicação. É responsabilidade da aplicação cliente ou servidor impor uma estrutura de dados.
Um sistema RPC permite que uma thread chame um procedimento ou função em outro processo. Esse outro processo pode estar em um espaço de endereçamento separado no mesmo computador ou pode estar executando em um computador distinto que é conectado por uma rede. A semântica RPCpermite à thread solicitante ativar o procedimento remoto exatamente como faria com um procedimento local.
A principal vantagem de um sistema RPC em relação aos sockets é que o sistema RPC gerencia o canal de comunicação, por isso os programas aplicativos podem ser escritos de modo que a localização de um procedimento, quer local ou remoto, seja transparente.

Implementação

Aqui será...
tracking img