26/09/2005 LCMI - DAS - UFSC 1 Introdução aos Sockets Java Fábio Favarim DAS – Departamento de Automação e Sistemas UFSC – Universidade.

Slides:



Advertisements
Apresentações semelhantes
Sistemas Operacionais II N Aula prática Java Sockets, RPC e RMI Eduardo Bezerra.
Advertisements

Sockets Marco Antonio – marcoreis.net Arquiteto de Software Dezembro/2007.
Comunicação entre processos distribuídos
Bruno Rafael de Oliveira Rodrigues
Ir p/ primeira página Cliente/Servidor Modelo usado para construir aplicações Servidor em número de porta conhecido – Aceita requisições e executa serviços.
Conceitos Relacionados a Internet
Modelos de Comunicação em Sistemas Distribuídos
Arquiteturas de Sistemas Distribuídos: Modelos de Comunicação
URL: Redes Prof. Edgard Jamhour URL:
Redes de Computadores Aula Prática 4
Comunicação Distribuída
Streams Java.
Interação Cliente Servidor
TCP Serviço de Transporte Confiável
Conceitos de Sockets Universidade Federal do Rio Grande do Sul (UFRGS)
1 Comunicação Inter-Processos -> RMI -> RPC -> TCP -> UDP (Abstração de passagem de mensagem)
1 Introdução aos Sockets (Java) Tiago Semprebom DAS – Departamento de Automação e Sistemas UFSC – Universidade Federal de Santa Catarina.
Paulo Roberto Freire Cunha
Sincronização e Comunicação entre Processos
FEUPDEECRedes de Computadores, 4º Ano de EEC, ramo de ACI Sockets Abril, 98Isidro Vila Verde 1 Formato das estruturas de dados Estrutura.
Classes e objetos Arrays e Sobrecarga
Classes e objetos P. O. O. Prof. Grace.
Obtenção de IP TCP UDP.
Camada de Transporte: Portas, Sockets, Aplicações em Rede
Introdução à Programação Distribuída em Java
Escola Secundária Filipa de Vilhena Ano Lectivo 2010/ Turma IGR1
REDES DE COMPUTADORES II
Funcionalidades e Protocolos da Camada de Aplicação
NETBIOS Disciplina: Redes de Computadores
Modelo de referência OSI
Aula 9 - Camada de aplicação
Infra-Estrutura de Comunicação (IF678) Aula Prática 02 – CIn/UFPE Davi Duarte Denyson José Eduardo Souza Ivan França Rafael Lima.
URI - Santo Ângelo - DECC
Tópicos em redes e sistemas distribuídos Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Programação com sockets
Java Avançado Luiz Carlos d´Oleron SJCP Java Sockets.
Comunicação Entre Processos Sockets - Java
Redes de Comunicação – Módulo 3
Camada de Transporte prof. Eduardo.
Java e Serviço de Transporte Vitor Brandi Junior.
Comunicação entre Processos - Sockets. Conceitos Básicos Sockets são uma forma de IPC ( InterProcess Communication ) fornecida pela 4.3 BSD que fornecem.
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
UML - Unified Modeling Language
Infra-Estrutura de Comunicação (IF678) Aula Prática CIn/UFPE Rafael Lucena Roberta Mota Rubens Lopes Rodolfo Santos João Pedro Cordeiro.
Implementando comunicação em JAVA via Sockets Alcides Calsavara - Leonardo R. Nunes -
1 Comunicação Inter-Processos -> RMI -> RPC -> TCP -> UDP (Abstração de passagem de mensagem)
IIS Web Server.
MODELO DE REFERÊNCIA TCP/IP
Desenvolvimento de Aplicações TCP/IP com Sockets Márcio de Sousa Dias
Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões Original por: Flávio.
Redes de Computadores I Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Arquitectura tcp. Camada tcp Ao contrário do protocolo UDP, o TCP representa um grande incremento de qualidade relativamente ao protocolo IP que lhe serve.
Arquitetura de Redes de Computadores – Luiz Paulo Maia Camada de Transporte1 Arquitetura de Redes de Computadores Luiz Paulo Maia Camada de Transporte.
Administração e Projeto de Redes
Programação Distribuída em Java Aula Na aula passada vimos: I/O Streams Filtros Readers and Writers.
Programação Distribuída em Java Aula Na aula passada vimos: I/O Sockets.
Programação Distribuída em Java Aula Na aula passada vimos Domain Name Server –Funcionamento básico O pacote java.net –Sua finalidade A classe InetAddress.
Arquitetura TCP/IP Aplicação Transporte Rede Enlace Física.
Camada de Aplicação Prof. Horácio. Objetivo Apresentar os detalhes específicos dos tipos de aplicação; Apresentar o modelo cliente-servidor; Apresentar.
Passagens de Mensagens Prof. Dr. Norian Marranghello
Rede de Computadores MAT164 – Redes de Computadores I Universidade Federal da Bahia Instituto de Matemática Departamento de Ciência da Computação.
Administração e Projeto de Redes Material de apoio Camada de Transporte Cap.4 10/02/2010.
Protocolos de Comunicação e Passagem de Mensagens
Sockets Redes de Comunicação de Dados Prof. Esp. Cristiano José Cecanho.
Redes de Computadores Prof. Msc. Moisés Pereira Bastos.
SOCKET - É um canal de comunicação entre processos que estabelece uma conexão entre eles na forma de cliente-servidor. Por meio de sockets, os computadores.
Capítulo 2 Redes de computadores e a Internet Camada de aplicação Prof. Gustavo Wagner.
Curso Superior em Redes de Computadores Camada de Aplicação Prof. Sales Filho.
Programação em Java Sockets Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Transcrição da apresentação:

26/09/2005 LCMI - DAS - UFSC 1 Introdução aos Sockets Java Fábio Favarim DAS – Departamento de Automação e Sistemas UFSC – Universidade Federal de Santa Catarina

26/09/2005 LCMI - DAS - UFSC 2 Sumário Introdução Sockets TCP Sockets UDP Sockets Multicast Referências

26/09/2005 LCMI - DAS - UFSC 3 Introdução Toda a comunicação entre processos em um sistema distribuído é, normalmente, baseada em trocas de mensagens. Quando vários processos precisam se comunicar, é necessária a adoção de protocolos, para que possam se entender. Meio de Transmissão Protocolo

26/09/2005 LCMI - DAS - UFSC 4 Protocolos Tempo Com licença? Que horas são? Com licença? Solicita conexão Envia mensagem Fecha Conexão Pois não... De nada. São 10h15. Aceita conexão Confirma recepção Libera Conexão

26/09/2005 LCMI - DAS - UFSC 5 O que são sockets? São abstrações que representam pontos de comunicação através dos quais processos se comunicam; Para que dois computadores possam trocar informações –Cada um utiliza um socket. Processo socket TCP ou UDP Sistema Operacional Aplicação Processo socket TCP ou UDP Rede

26/09/2005 LCMI - DAS - UFSC 6 Cliente/Servidor Que horas são? São 10:20 da manhã. CLIENTE SERVIDOR Requisita serviço Fornece serviço Os papeis de clientes e servidores não são fixos em processos: um servidor pode ser cliente de outro serviço. Os sockets adotam o paradigma cliente/servidor. – Um computador é o Servidor: abre o socket e fica na escuta, a espera de mensagens ou pedidos de conexões dos clientes – O outro é o Cliente: envia mensagens para o socket servidor

26/09/2005 LCMI - DAS - UFSC 7 Sockets na Internet Na Internet, cada máquina têm um endereço único: Endereço IP Cada endereço IP possui portas associadas, que representam conexões individuais com este endereço Algumas portas conhecidas: echo(7) ftp(21) telnet(23) http(80) pop3(110) Definidas pela IANA (Internet Assigned Numbers Authority) Para se comunicar com um servidor, um cliente precisa: – Endereço IP da máquina onde o servidor executa – Número da porta que o servidor escuta. Ex: :80. Binding: quando o socket é criado, uma porta deve ser associada

26/09/2005 LCMI - DAS - UFSC 8 Modos de Operação Orientado a conexão: TCP (Transport Control Protocol) – As mensagens são enviadas através de um canal de comunicação Sem conexão: UDP (User Datagram Protocol) – As mensagens de tamanho fixo (datagramas) são transmitidas individualmente para destinos especificos Canal de Comunicação

26/09/2005 LCMI - DAS - UFSC 9 Tipos de sockets TCP - Orientado a conexão – A conexão deve ser estabelecida antes da transmissão dos dados; – A conexão deve ser encerrada após a transmissão dos dados; – Em termos de qualidade de serviço da comunicação: confiável e respeita ordem FIFO. – Ex: sistema de telefonia UDP - Sem conexão – O endereço destino é especificado em cada datagrama. – Em termos de qualidade de serviço: não garante confiabilidade e nem ordenação; – Menos overhead na comunicação. – Ex: Correspondência via serviço postal O modo usado depende das necessidades da aplicação

26/09/2005 LCMI - DAS - UFSC 10 Usando Sockets em Java Pacote java.net ; Principais classes: – TCP: Socket e ServerSocket ; – UDP: DatagramPacket e DatagramSocket ; – Multicast: DatagramPacket e MulticastSocket. Este pacote também contém classes que fornecem suporte a manipulação de URLs e acesso a serviços HTTP, entre outras coisas.

26/09/2005 LCMI - DAS - UFSC 11 Sockets TCP Clientes e servidores são diferentes. – Servidor usa a classe ServerSocket para escutar uma porta de rede da máquina a espera de requisições de conexão. ServerSocket sSocket = new ServerSocket(12345,5); – Clientes utilizam a classe Socket para requisitar conexão a um servidor específico e então transmitir dados. Socket cSocket = new Socket( ,12345); A seguir explicaremos detalhadamente como construir servidores e clientes em Java.

26/09/2005 LCMI - DAS - UFSC 12 Servidor TCP Inicialmente, um servidor deve criar um socket que associe o processo a uma porta do host; ServerSocket sSocket = new ServerSocket(porta,backlog); porta: número da porta que o socket deve esperar requisições; backlog: tamanho máximo da fila de pedidos de conexão que o sistema pode manter para este socket. - O backlog permite que requisições sejam enfileiradas (em estado de espera) enquanto o servidor está ocupado executando outras tarefas. - As requisições são processadas uma a uma - Se uma requisição de conexão chegar ao socket quando esta fila estiver cheia, a conexão é negada.

26/09/2005 LCMI - DAS - UFSC 13 Servidor TCP O método accept é usado para retirar as requisições da fila. – Fica bloqueado até que um cliente solicite uma requisição Socket socket = sSocket.accept(); O método accept retorna uma conexão com o cliente

26/09/2005 LCMI - DAS - UFSC 14 Servidor TCP Quando do recebimento da conexão, o servidor pode interagir com o cliente através da leitura e escrita de dados no socket. A comunicação em si é feita com o auxílio de classes tipo streams, que são classes do pacote java.io. – Stream de Leitura: DataInputStream in = new DataIntputStream(cliente.getInputStream()); Este stream tem vários métodos read (ver pacote java.io ). – Stream de Escrita: DataOutputStream out = new DataOutputStream(socket.getOutputStream()); Este stream tem vários métodos write (ver pacote java.io ).

26/09/2005 LCMI - DAS - UFSC 15 Servidor TCP Encerramento da conexão. – Com um cliente em específico: socket.close(); – Do socket servidor (terminando a associação com a porta do servidor): sSocket.close();

26/09/2005 LCMI - DAS - UFSC 16 Servidor TCP ServerSocket serverSocket = new ServerSocket(port,backlog); do{ //aguarda conexão Socket socket = serverSocket.accept(); //obtém o stream de entrada e o encapsula DataInputStream dataInput = new DataInputStream(socket.getInputStream()); //obtém o stream de saída e o encapsula DataOutputStream dataOutput = new DataOutputStream(socket.getOutputStream()); //executa alguma coisa... no caso, um eco. String data = dataInput.readUTF(); dataOutput.writeUTF(data); //fecha o socket socket.close(); }while(notExit()); serverSocket.close();

26/09/2005 LCMI - DAS - UFSC 17 Cliente TCP Inicialmente, o cliente deve criar um socket especificando o endereço e a porta do serviço a ser acessado: Socket socket = new Socket(host, porta); host é endereço ou nome do servidor porta é o número da porta em que o servidor está escutando Esta chamada representa a requisição de uma conexão com o servidor. Se o construtor for executado sem problemas, a conexão está estabelecida. A partir daí, da mesma forma que no servidor, o cliente pode obter os streams de entrada e saída. DataInputStream in = new DataIntputStream(cliente.getInputStream()); DataOutputStream out = new DataOutputStream(socket.getOutputStream()); Ao final, o socket é fechado da mesma forma que no servidor.

26/09/2005 LCMI - DAS - UFSC 18 Cliente TCP InetAddress address = InetAddress.getbyName(name); Socket serverSocket = new Socket(address,port); //obtém o stream de saída e o encapsula DataOutputStream dataOutput = new DataOutputStream(socket.getOutputStream()); //obtém o stream de entrada e o encapsula DataInputStream dataInput = new DataInputStream(socket.getInputStream()); //executa alguma coisa... no caso, envia uma mensagem //e espera resposta. dataOutput.writeUTF(request); String response = dataInput.readUTF(); //fecha o socket socket.close();

26/09/2005 LCMI - DAS - UFSC 19 Resumo – Sockets TCP Servidor –Cria o socket servidor e aguarda conexão –Usa método accept() para pegar novas conexões –Cria streams entrada/saída para o socket da conexão –Faz a utilização dos streams conforme o protocolo –Fecha os streams –Fecha socket da conexão –Repete várias vezes –Fecha o socket servidor Cliente –Cria o socket com conexão cliente –Associa streams de leitura e escrita com o socket –Utiliza os streams conforme o protocolo do servidor –Fecha os streams –Fecha o socket

26/09/2005 LCMI - DAS - UFSC 20 Resumo – Sockets TCP mais Inicia aplicação Termina aplicação Cria o socket Fecha streams e socket Cria streams Conduz conversa Aceita conexão Cria streams Conduz conversa Fecha streams e socket Cria o socket servidor SimNão Tentativa de conexão Desconexão Troca de dados ClienteServidor

26/09/2005 LCMI - DAS - UFSC 21 Resumo – Sockets TCP Servidor apresentado processa uma conexão de cada vez Servidor concorrente – Cria uma nova thread para cada conexão aberta – Consegue processar várias conexões simultaneamente

26/09/2005 LCMI - DAS - UFSC 22 Sockets UDP A comunicação UDP é feita através de duas classes: – A mesma classe é usada pelo cliente e pelo servidor – Classe DatagramSocket: Socket servidor: DatagramSocket socket = new DatagramSocket(porta); O servidor deve especificar sua porta. Omissão pr ó xima porta livre. Socket cliente: DatagramSocket socket = new DatagramSocket(); – Classe DatagramPacket As comunicações ocorrem através da troca de datagramas Os datagramas contêm: – os dados a serem enviados e recebidos – endereço de destino/origem do datagrama.

26/09/2005 LCMI - DAS - UFSC 23 Servidor UDP Inicialmente o servidor deve criar um socket que o associe a uma porta da máquina. – DatagramSocket socket = new DatagramSocket(porta); – porta: número da porta que o socket deve esperar requisições; Depois do socket criado, o servidor fica bloqueado até o recebimento de um datagrama (método receive) byte[] buffer = new byte[n]; \\{array de bytes} DatagramPacket dg = new DatagramPacket(buffer,n); socket.receive(dg); – Os dados recebidos devem caber no buffer do datagrama. Desta forma, protocolos mais complexos baseados em datagramas devem definir cabeçalhos e mensagens de controle. Fechamento do socket: socket.close();

26/09/2005 LCMI - DAS - UFSC 24 Servidor UDP Para enviar dados para um socket datagrama – Necessário um endereço, classe InetAddress – InetAddress addr = InetAddress.getByName(alambique.das.ufsc.br); O envio de datagramas é realizado de forma bastante simples: String toSend = Este eh o dado a ser enviado!; byte data[] = toSend.getBytes(); DatagramPacket sendPacket = new DatagramPacket(data,data.length,host,porta); socket.send(sendPacket); A String deve ser convertida para array de bytes. Endereço destino (host + porta ) é incluído no DatagramPacket. Como saber quem enviou o pacote ? – pacoteRecebido.getAddress(); – pacoteRecebido.getPort();

26/09/2005 LCMI - DAS - UFSC 25 Servidor UDP DatagramSocket socket = new DatagramSocket(port); do{ //recebimento dos dados em um buffer de 1024 bytes DatagramPacket recPacket = new DatagramPacket( new byte[1024],1024); socket.receive(recPacket); //recepção //envio de dados para o emissor do datagrama recebido DatagramPacket sendPacket = new DatagramPacket( recPacket.getData(),recPacket.getData().length, recPacket.getAddress(),recPacket.getPort()); socket.send(sendPacket); //envio }while(notExit()); socket.close();

26/09/2005 LCMI - DAS - UFSC 26 Cliente UDP Inicialmente o cliente deve criar um socket. DatagramSocket socket = new DatagramSocket(); Opcional: o cliente pode conectar o socket a um servidor específico, de tal forma que todos os seus datagramas enviados terão como destino esse servidor. socket.connect(host,porta); Parâmetros: host é endereço ou nome do servidor e porta é o número da porta em que o servidor espera respostas. Executando o connect, o emissor não necessita mais definir endereço e porta destino para cada datagrama a ser enviado. A recepção e o envio de datagramas, bem como o fechamento do socket, ocorrem da mesma forma que no servidor.

26/09/2005 LCMI - DAS - UFSC 27 Cliente UDP InetAddress address = InetAddress.getByName(name); DatagramSocket socket = new DatagramSocket(); //socket.connect(address,port); byte[] req =... //envio de dados para o emissor do datagrama recebido DatagramPacket sendPacket = new DatagramPacket(req,req.length,address,port); //DatagramPacket dg1 = new DatagramPacket(req,req.length); socket.send(sendPacket); //envio //recebimento dos dados em um buffer de 1024 bytes DatagramPacket recPacket = new DatagramPacket( new byte[1024],1024); socket.receive(recPacket); //recepção byte[] resp = recPacket.getData(); socket.close();

26/09/2005 LCMI - DAS - UFSC 28 Resumo – Sockets UDP Cliente –Cria um socket datagrama em qualquer porta livre –Cria um endereço destinatário –Envia os dados conforme o protocolo em questão –Espera por dados com a resposta –Repete várias vezes –Fecha o socket datagrama Servidor –Cria um socket datagrama em uma porta específica –Chama receive() para esperar por pacotes –Responde ao pacote recebido conforme protocolo em questão –Repete várias vezes –Fecha o socket

26/09/2005 LCMI - DAS - UFSC 29 Resumo – Sockets UDP Fim? Inicia aplicação Termina aplicação Envia dados (solicitação) Recebe dados Envia dados (resposta) Fecha socket Cria o socket datagrama Sim Não Cria o socket datagrama Fim? Sim Fecha socket Não Dados do Cliente Dados do Servidor ClienteServidor

26/09/2005 LCMI - DAS - UFSC 30 Sockets Multicast Por ser um modelo baseado em datagramas a programação baseada em UDP/Multicast IP não difere muito da programação UDP já vista. As duas principais diferenças, em termos de modelo de programação, são: – Uso da classe MulticastSocket (ao invés de DatagramSocket ). A classe MulticastSocket estende a classe DatagramSocket ( os métodos da segunda estão disponíveis na primeira); – Servidores interessados em receber mensagens de um grupo devem entrar nesse grupo.

26/09/2005 LCMI - DAS - UFSC 31 Revisão: Multicast IP Extensões ao protocolo IP para comunicação multiponto; Assim como o IP unicast, não oferece garantias a respeito da entrega ou ordenação de pacotes; Cada grupo é identificado por um endereço IP classe D ( a ); Define grupos abertos e não provê informações sobre quem são os membros (membership); O gerenciamento de grupos é feito de maneira dinâmica através de operações implementadas pelo IGMP (Internet Group Management Protocol).

26/09/2005 LCMI - DAS - UFSC 32 Sockets Multicast Operações para gerenciamento de grupos: – CreateGroup: Cria um grupo cujo único membro é o host criador; Executa quando um primeiro servidor se junta a um grupo. – JoinGroup: Requisita a adição deste host a um grupo existente; MulticastSocket socket = new MulticastSocket(porta); socket.joinGroup(groupAddress); – LeaveGroup: Pede a remoção do host invocador ao grupo especificado. socket.leaveGroup(groupAddress); Operações para envio e recepção de grupos: socket.send(dg) ou socket.receive(dg).

26/09/2005 LCMI - DAS - UFSC 33 Servidor Multicast IP InetAddress groupAddress = InetAddress.getByName( ); MulticastSocket socket = new MulticastSocket(port); socket.joinGroup(groupAddress); do{ //recebimento dos dados em um buffer de 1024 bytes DatagramPacket dg = new DatagramPacket( new byte[1024],1024); socket.receive(dg); //recepção //imprime a mensagem recebida System.out.println(received + new String(dg.getData).trim()); }while(notExit()); socket.leaveGroup(groupAddress); socket.close();

26/09/2005 LCMI - DAS - UFSC 34 Cliente Multicast IP String message =... InetAddress groupAddress = InetAddress.getByName( ); MulticastSocket socket = new MulticastSocket(); byte[] data = message.getBytes(); //recebimento dos dados em um buffer de 1024 bytes DatagramPacket dg = new DatagramPacket( data,data.length,0,groupAddres,port); socket.send(dg); //envio socket.close();

26/09/2005 LCMI - DAS - UFSC 35 Referências Sockets em Java – – Sockets em C – – Esta apresentação e exemplo de cada tipo de sockets em : –

26/09/2005 LCMI - DAS - UFSC 36