Comunicação entre processos



Documentos relacionados
socket Objetivo: aprender a construir aplicações cliente/servidor que se comunicam usando sockets

Programação de Sockets

Programação de sockets com TCP

Programação de Sockets

Redes de Computadores II. Programação com Sockets em Python

Disciplina de Sistemas Distribuídos. Comunicação em Sistemas Distribuídos

Programação: Sockets em Java

Mecanismos de Comunicação. Sockets em java (

Capítulo 2 Camada de aplicação

Redes de Computadores Programação com Sockets

PROGRAMAÇÃO COM SOCKETS

Programação Paralela e Distribuída. Prof. Cidcley T. de Souza

Capítulo 2 Camada de aplicação

Capítulo II Modelos de Programação Distribuída

Capítulo 2 Camada de aplicação

Capítulo 2. Camada de aplicação

Programação com sockets (em Java)

Capítulo 2 Camada de aplicação

Sockets. Introdução. Introdução. Programando para redes em Java. mecanismo de alto nível para acessar recursos na Internet.

Java 2 Standard Edition Fundamentos de

Olho por olho, e o mundo acabará cego. Mohandas Gandhi

Relatório 1º Laboratório: O Java e os Sockets. Licenciatura: ETI Turma : ETC1 Grupo : rd3_t3_02 Data: 22/02/2010

Sockets. Bruno Guimarães Lucas Rossini

Cliente-servidor com Sockets TCP

Aula 30 - Sockets em Java

Redes de Computadores I

Sockets em Java. Leonardo R. Nunes - leonardo@sumersoft.com. 1. Introdução. 2. Sockets TCP/IP

INF01018 Aula Prática 1 Cliente-Servidor e Multicast

Infra-Estrutura de Comunicação (IF678)

Sistemas Distribuídos

INF1013 MODELAGEM DE SOFTWARE

REDES DE COMPUTADORES

Sockets com Java Parte I

Sistemas Distribuídos Java Sockets

Capítulo 2 Camada de aplicação

Redes de Computadores e a Internet

Implementando comunicação em JAVA via Sockets. Alcides Calsavara - alcides@ppgia.pucpr.br Leonardo R. Nunes - leonardo@sumersoft.

Sockets em Ruby. Curso de Tecnologia em Redes de Computadores Programação para Redes

Sistemas Distribuídos

Programação de Sockets em C/C++

Rede de Computadores (REC)

Programação em Rede Baseada em Java. Luiz Affonso Guedes Tópicos em Redes de Computadores Programação Distribuída

Bacharelado em Ciência e Tecnologia BC Processamento da Informação Teoria Arquivos Prof. Edson Pinheiro Pimentel edson.pimentel@ufabc.edu.

Comunicação entre Processos

Infra-Estrutura de Comunicação (IF678)

Passagem de Mensagens

Redes de Computadores II

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Comunicação via Sockets. Prof. Orlando Loques - IC/UFF. versão

Camada de Transporte, protocolos TCP e UDP

Comunicação Inter-Processos. Prof. Adriano Fiorese. Conceitos Iniciais

Sistemas Distribuídos Capítulos 2 e 3: Modelos, Arquitecturas e Revisão de Redes

User Datagram Protocol

FTP FILE F TRANSFER PROTOCOL. Tópicos

Computação Distribuída

Sistemas Distribuídos. Prof. Ricardo Ribeiro dos Santos

Descrição. Implementação. Departamento de Informática e Estatística Universidade Federal de Santa Catarina LAB 4 Transferência de Arquivos

Redes de Computadores. Trabalho de Laboratório Nº7

Exercícios de Revisão Java Básico

Um pouco do Java. Prof. Eduardo

Camada de Aplicação. Prof. Eduardo

UNIVERSIDADE. Sistemas Distribuídos

Programação Na Web. Servlets: Como usar as Servlets. Agenda. Template genérico para criar Servlets Servlet 2.4 API

Sistemas de Operação Sockets

Redes de computadores

Java : Comunicação Cliente-Servidor.

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Threads e Sockets em Java. Threads em Java. Programas e Processos

Redes de Computadores I Licenciatura em Eng. Informática e de Computadores 1 o Semestre, 26 de Outubro de o Teste A

Disciplina de Redes de Computadores Estudo Dirigido para a Prova II Professor Dr Windson Viana de Carvalho

Sistemas Distribuídos Capítulos 3 e 4 - Aula 4

Conversão de Tipos e Arrays

Conexão Socket na MIDP

Curso de especialização em Teleinformática Disciplina Sistemas Distribuídos Prof. Tacla

Sistemas Distribuídos

Introdução à Camada de Aplicação. Prof. Eduardo

Programação II Java Streams. Christopher Burrows

Computação II Orientação a Objetos

Transcrição:

Comunicação entre processos Processo: um programa em execução num sistema terminal (host) Processos em sistemas distintos comunicam trocando mensagens Processo Cliente: processo que inicia a comunicação Processo Servidor: processo que espera passivamente até ser contactado por um cliente Nota: As aplicações P2P usam simultaneamente processos cliente e processos servidor 4/28/09 Universidade do Minho 1

SOCKETS Processos enviam e recebem mensagens através de um socket O socket é equivalente a uma porta O processo que envia faz sair as mensagens pela porta (socket) e confia na infra-estrtutura de transporte que está do outro lado da porta para levar a mensagem até ao processo que recebe O processo que recebe as mensagens também o faz através de uma porta (socket) 4/28/09 Universidade do Minho 2

Endereçamento Para receber ou enviar mensagens os processos precisam de um identificador Os sistemas já possuem endereços IP Mas serão suficientes para endereçar os processos? Obviamente que não: correm múltiplos processos em simultâneo em cada sistema! 4/28/09 Universidade do Minho 3 identificador inclui endereço IP e número de porta associado ao processo. Exemplos de portas bem conhecidas: Servidor HTTP: 80 Servidor de Mail: 25 Para enviar uma mensagem a um servidor Web é preciso: IP: 128.119.245.12 Porta: 80

Aplicações definem Tipos de mensagens que trocam, Ex: request, response Sintaxe das mensagens: Que campos vai ter cada mensagem e como são delimitados Semântica das mensagens Significado da informação contida em cada campo Regras temporais que definem quando e como deve um processo responder às mensagens que recebe 4/28/09 Universidade do Minho 4

Que serviço de transporte usar? Tolerância a perdas Algumas aplicações (ex: audio) toleram algumas perdas Outras (ex: transferência de ficheiros, telnet) requerem que a transferência seja Sensibilidade 100% fiável aos atrasos Algumas aplicações (ex: telefonia IP) requerem que os atrasos sejam baixos Consumo de Largura de Banda Algumas aplicações (ex: multimedia) exigem uma largura de banda mínima para poderem funcionar Outras ( aplicações elásticas ) utilizam a largura e banda que houver disponível 4/28/09 Universidade do Minho 5

Serviços de transporte na Internet Serviço de transporte TCP: Orientado à conexão Transporte fiável Controlo de fluxo Controlo de congestão Não assegura atrasos nem largura de banda mínimos Serviço de transporte UDP: Transferência não fiável Não oferece mais nada 4/28/09 Universidade do Minho 6

Programação com Sockets Objectivo: construir aplicações cliente/servidor que usam sockets Socket API Introduzida no UNIX BSD4.1 em 1981 Os sockets devem ser explicitamente criadosm usados e livbertados pelas aplicações Paradigma cliente/servidor Dois tipos de serviço de transporte: Datagrama não fiável Stream fiável socket Uma interface local a um sistema, criado pelas aplicações, controlado pelo sistema operativo (uma porta ) na qual um processo de aplicação pode simultaneamente enviar e receber mensagens de outros processos 4/28/09 Universidade do Minho 7

Programação usando Sockets TCP Socket: uma porta entre o processo que executa a aplicação e o protocolo de transporte fim-a-fim (UCP or TCP) TCP service: serviço de transferência de bytes fiável de um processo para outro Controlado pelo programador da aplicação Controlado pelo Sistema Operativo processo socket TCP com buffers e variáveis internet processo socket TCP com buffers e variáveis Controlado pelo programador da aplicação Controlado pelo Sistema Operativo Cliente ou servidor Cliente ou servidor 4/28/09 Universidade do Minho 8

Programação usando Sockets TCP O Cliente deve contactar o servidor O processo servidor deve estar a correr O Servidor deve ter criado um socketc que aguarda pedidos de clientes Os Clientes contactam o servidor da seguinte forma: Criam um socket TCP local ao cliente. Especificam o endereço IP e o número da porta do processo servidor Estabelecem a ligação com o processo servidor. 4/28/09 Universidade do Minho 9 Quando contactado pelo cliente o servidor TCP cria um socket para que o processo servidor comunique com o cliente: Permite que o servidor contacte com múltiplos clientes O número da porta origem Ponto é de usado vista para da aplicação distinguir os diferentes clientes. O TCP disponibiliza um serviço de transferência fiável de bytes entre cliente e servidor

Programação usando Sockets TCP Streams Uma stream é uma sequência de caracteres que flui para dentro ou fora de um processo Uma input stream está associada a uma fonte de input do processo, por exemplo o teclado (standard input) ou um socket Uma output stream está associada a uma fonte de saída, por exemplo o monitor (standard output) ou um socket 4/28/09 Universidade do Minho 10

Programação usando Sockets TCP Exemplo de uma aplicação cliente-servidor 1) O cliente lé uma linha do standard input (infromuser stream),e envia a linha lida para o servidor via socket (outtoserver stream) 2) O servidor lê a linha do socket 3) Converte tudo para maiúsculas, e envia a linha de volta para o cliente 4) O cliente lê a linha modificada do socket (infromserver stream) e imprimi-a. Client process client TCP socket 4/28/09 Universidade do Minho 11

Interacção Cliente/Servidor usando sockets TCP Servidor (em execução no hostid) create socket, port=x, for incoming request: welcomesocket = ServerSocket() wait for incoming connection request connectionsocket = welcomesocket.accept() read request from connectionsocket write reply to connectionsocket close connectionsocket TCP Estabelecimento da ligação Cliente create socket, connect to hostid, port=x clientsocket = Socket() send request using clientsocket read reply from clientsocket close clientsocket 4/28/09 Universidade do Minho 12

Exemplo de um Cliente Java import java.io.*; import java.net.*; class TCPClient { Cria input stream Cria Socket cliente, ligado ao servidor Cria output stream associada ao socket 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); PrintWriter outtoserver = new PrintWriter(clientSocket.getOutputStream(), true); 4/28/09 Universidade do Minho 13

Exemplo de um Cliente Java TCP (2) Cria input stream associada ao socket BufferedReader infromserver = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = infromuser.readline(); Envia linha para o servidor Lê linha do servidor outtoserver.println(sentence + '\n'); modifiedsentence = infromserver.readline(); System.out.println("FROM SERVER: " + modifiedsentence); clientsocket.close(); } } 4/28/09 Universidade do Minho 14

Exemplo de um Servidor Java (TCP) import java.io.*; import java.net.*; class TCPServer { Cria um socket à escuta na porta 6789 Espera por qualquer contacto por parte de um cliente Cria input stream, associada ao socket 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())); 4/28/09 Universidade do Minho 15

Exemplo de um Servidor Java TCP (2) Cria output stream, associada ao socket PrintWriter outtoclient = new PrintWriter(connectionSocket.getOutputStream(), true); Lê uma linha do socket Escreve uma linha no socket } } } clientsentence = infromclient.readline(); capitalizedsentence = clientsentence.touppercase() + '\n'; outtoclient.println(capitalizedsentence); Fim do ciclo while, volta ao início e espera novo pedido de outro cilente 4/28/09 Universidade do Minho 16

Programação usando Sockets UDP UDP: não existe uma ligação estabelecida entre o cliente e o servidor sem handshaking o emissor (cliente) associa explicitamente a cada pacote o endereço IP e porta do receptor o receptor (servidor) deve extrair de cada pacoete recebido o endereço IP e a porta do emissor Ponto de vista da aplicação O UDP disponibiliza um serviço de transferência não fiável de datagramas (grupos de bytes) entre o cliente e o servidor UDP: os dados transmitidos podem ser recebidos fora de ordem 4/28/09 Universidade do Minho 17

Interacção Cliente/Servidor usando sockets UDP Servidor (em execução no hostid) create socket, port=x, for incoming request: serversocket = DatagramSocket() read request from serversocket Cliente create socket, clientsocket = DatagramSocket() Create, address (hostid, port=x, send datagram request using clientsocket write reply to serversocket specifying client host address, port number read reply from clientsocket close clientsocket 4/28/09 Universidade do Minho 18

Exemplo: Cliente JAVA (UDP) Client process Output: envia datagrama (TCP envia stream de bytes ) Input: recebe datagrama (TCP recebe stream de bytes ) client UDP socket 4/28/09 Universidade do Minho 19

Exemplo: Cliente JAVA (UDP) import java.io.*; import java.net.*; Cria input stream Cria socket cliente Traduz o nome do host onde está o servidor para endereço usando o DNS 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(); 4/28/09 Universidade do Minho 20

Exemplo: Cliente JAVA(UDP), cont. Cria o datagrama com os dados a enviar, tamanho, endereço e porta do servidor Envia datagrama para o servidor Lê datagrama do servidor 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(),0, receivepacket.getlength()); } System.out.println("FROM SERVER:" + modifiedsentence); clientsocket.close(); } 4/28/09 Universidade do Minho 21

Exemplo: Servidor Java (UDP) import java.io.*; import java.net.*; Cria um socket datagrama à escuta na porta 9876 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]; Cria espaço para um datagrama Recebe datagrama while(true) { DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length); serversocket.receive(receivepacket); 4/28/09 Universidade do Minho 22

Exemplo: Servidor Java (UDP), cont Descobre end. IP e port # do emissor String sentence = new String(receivePacket.getData(), 0, receivepacket.getlength()); InetAddress IPAddress = receivepacket.getaddress(); int port = receivepacket.getport(); Cria datagrama para enviar para o cliente Escreve datagrama no socket } } String capitalizedsentence = sentence.touppercase(); senddata = capitalizedsentence.getbytes(); DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, IPAddress, port); serversocket.send(sendpacket); } Fim do ciclo while, volta ao início e espera por novo datagrama 4/28/09 Universidade do Minho 23