INF01018 Aula Prática 1 Cliente-Servidor e Multicast



Documentos relacionados
Programação com Sockets TCP e UDP - Cliente. Gustavo Leitão

Aula Prática. Comunicação em SOCKTS. Disciplina: INF01151

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

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

Java 2 Standard Edition Fundamentos de

Sistemas de Operação Sockets

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

Sistemas Distribuídos Java Sockets

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

TROCA DE MENSAGENS SOCKETS. Comunicando processos através de SOCKETS. SOCKETS com conexão. SOCKETS sem conexão

Programação com sockets (em Java)

Sistemas Distribuídos

Modelo Cliente/Servidor e Introdução a Sockets

Passagem de Mensagens

Comunicação entre processos

06/10/2015. Modelo TCP/IP Camada de Transporte DISCIPLINA: TECNOLOGIA DE REDES DE COMPUTADORES. UDP User Datagram Protocol. UDP User Datagram Protocol

Sockets. Bruno Guimarães Lucas Rossini

Sockets. André Restivo. April 29, Faculdade de Engenharia da Universidade do Porto. André Restivo (FEUP) Sockets April 29, / 27

sockets interprocess communication Taisy Weber

Programação de Sockets

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

Aula de Socket. Rafael De Tommaso do Valle

Mecanismos de Comunicação. Sockets em java (

Sockets - Conceitos Básicos. COMUNICAÇÃO ENTRE PROCESSOS Sockets. Conceitos Básicos. Tipos de Sockets

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

Programação de sockets com TCP

Sistemas Operacionais - Básico e Avançado - Prof. Celso Maciel da Costa Mestrado em Informática - PUCRS

Sockets com Java Parte I

Comunicação em Sistemas Distribuídos. Conceitos: Paradigma C/S. Conceitos: Paradigma C/S. Paradigma Cliente/Servidor

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

Programação: Sockets em Java

Sistemas Operacionais:

Programação de Sockets

Sockets e Threads em Java

Bibliotecas. Apoio à Programação Distribuída. Socket. Socket. bibliotecas bibliotecas+ferramentas linguagens de programação distribuídas

Computação Distribuída

Cliente-servidor com Sockets TCP

Cliente/Servidor. Programação com Sockets. Graça Bressan. Graça Bressan/LARC

Sistemas Distribuídos. Coulouris Capítulo 4

Protocolo de resolução de endereços: ARP

Comunicação entre Processos

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

Sistemas Distribuídos. Prof. Ricardo Ribeiro dos Santos

FTP FILE F TRANSFER PROTOCOL. Tópicos

Aula 30 - Sockets em Java

MC823 Laboratório de Teleprocessamento e Redes

Redes de Computadores (PPGI/UFRJ)

Sistemas Distribuídos

INF1013 MODELAGEM DE SOFTWARE

UNIVERSIDADE. Sistemas Distribuídos

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

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

Introdução à Programação com Sockets. Fernando Jorge Silveira Filho Daniel Sadoc Menasché

Redes de Computadores I. Introdução a Programação com Sockets em C# Prof. Marcelo Charan

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

Servidor UDP. Programação Sockets Volnys Bernal. Servidor UDP Resumo das Chamadas UDP. Resumo de Chamadas UDP. Resumo de Chamadas UDP

Cliente-servidor com Sockets TCP

Sistemas Distribuídos

Um Tutorial sobre Sockets Parte I

Introdução à Programação Sockets. Programação Sockets. (c) Volnys Bernal. Agenda. Introdução à Programação Sockets

Relatório do Laboratório 3

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

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

Resumo das Propriedades de UDP e de TCP

Tópicos em Sistemas Distribuídos. Modelos de Comunicação

Programação com Sockets

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

Redes de Computadores Programação com Sockets

Aula 2 Arquitetura de Redes. Prof. Dr. S. Motoyama

Redes de Computadores

Sistemas Distribuídos

Redes de Computadores e Aplicações

Engenharia Elétrica Eletrônica Slides 20: TCP/IP em Winsocks 2. API do Windows para programar utilizando o protocolo TCP/IP Prof. Jean Marcelo SIMÃO

Um pouco do Java. Prof. Eduardo


Conceitos Básicos. Conceitos Básicos. Networking. Programando para redes em Java. empregando os protocolos:

Transcrição:

1 / 30 INF01018 Aula Prática 1 Cliente-Servidor e Multicast Lucas Mello Schnorr, Alexandre Silva Caríssimi {lmschnorr,asc}@inf.ufrgs.br http://www.inf.ufrgs.br/ lmschnorr/ad/ INF01018 Sistemas Operacionais Distribuídos e de Redes Sala 102 Prédio 67 05 Setembro 2006

Roteiro 2 / 30 1 Introdução 2 Cliente-Servidor 3 Multicast 4 Referências

Introdução Dar suporte às aulas teóricas 04 e 05 Utilização de exemplos com código fonte Duas linguagens de programação: Java e C Programas Cliente/Servidor e Multicast Download de Exemplos http://www.inf.ufrgs.br/ lmschnorr/ad/aula1.tar.gz 3 / 30

Introdução Parte do Cliente/Servidor 4 / 30 Do lado do servidor Recebe comandos dos clientes Se comando for igual a hora, enviar hora local ao cliente Se comando não for conhecido, envia mensagem ao cliente avisando Do lado do cliente Cria uma datagrama com o comando Envia ao servidor Aguarda uma resposta

Introdução Parte do Multicast 5 / 30 Dois programas Programa Receptor Cria um socket multicast Faz bind desse socket a um endereço multicast Aguarda mensagens do socket e imprime na tela Programa Enviador Cria um socket multicast Entra no grupo multicast Envia uma mensagem ao grupo

Cliente-Servidor UDP Serviço orientado a Datagramas Sem confirmação de recebimento ou retentativas Do lado do servidor Recebe comandos dos clientes Se comando for igual a hora, enviar hora local ao cliente Se comando não for conhecido, envia mensagem ao cliente avisando Do lado do cliente Cria uma datagrama com o comando Envia ao servidor Aguarda uma resposta 6 / 30

UDP usando a linguagem C 7 / 30 Principais funções socket (int domain, int type, int protocol) bind (int sockfd, struct sockaddr *addr, socklen t len) recvfrom (int s, void *buf, size t len, int flags, struct sockaddr *from, socklen t *fromlen) sendto (int s, const void *buf, size t len, int flags, const struct sockaddr *to, socklen t tolen)

Cliente-Servidor UDP em C 1/3 Códigos retirados do arquivo ServidorUDP.c 8 / 30 30 / c r i a r socket UDP para receber ou enviar datagramas / 31 i f ( ( sock = socket ( PF INET, SOCK DGRAM, IPPROTO UDP) ) < 0 ) { 32 p e r r o r ( sock ( ) falhou ) ; 33 } 35 / c o n s t r u i r a e s t r u t u r a de endereco l o c a l / 36 memset(& echoservaddr, 0, sizeof ( echoservaddr ) ) ; 37 echoservaddr. s i n f a m i l y = AF INET ; 38 echoservaddr. s i n a d d r. s addr = h t o n l (INADDR ANY ) ; 39 echoservaddr. s i n p o r t = htons ( numeroporta ) ; 41 / Bind ao endereco l o c a l / 42 i f ( bind ( sock, ( stru ct sockaddr ) & echoservaddr, 43 sizeof ( echoservaddr )) <0){ 44 p e r r o r ( bind ( ) falhou ) ; 45 }

Cliente-Servidor UDP em C 2/3 Códigos retirados do arquivo ServidorUDP.c 9 / 30 47 while ( 1 ) { 48 / esperar mensagem de alguem / 49 cliaddrlen = sizeof ( echoclntaddr ) ; 50 i f ( ( recvmsgsize = recvfrom ( sock, echobuffer, ECHOMAX, 0, 51 ( stru ct sockaddr ) & echoclntaddr, & cliaddrlen )) <0){ 52 p e r r o r ( recvfrom ( ) falhou ) ; 53 } 54 p r i n t f ( Recebeu c l i e n t e %s\n, 55 i n e t n t o a ( echoclntaddr. s i n a d d r ) ) ; 56 p r i n t f ( ==> [%s] %d\n, echobuffer, cliaddrlen ) ; 68 / enviar a HORA para o c l i e n t e / 69 i n t bytesenviados = sendto ( sock, t i m e s t r i n g, 70 sizeof ( t i m e s t r i n g ), 0, 71 ( stru ct sockaddr )& echoclntaddr, 72 sizeof ( echoclntaddr ) ) ; 73 p r i n t f ( enviando %d\n, bytesenviados ) ;

Cliente-Servidor UDP em C 3/3 Códigos retirados do arquivo ClienteUDP.c 36 / c r i a r um socket UDP / 37 i f ( ( sock = socket ( PF INET, SOCK DGRAM, IPPROTO UDP) ) < 0 ) { 38 p e r r o r ( socket ( ) falhou ) ; 39 } 41 / c o n s t r u i r a e s t r u t u r a de endereco do s e r v i d o r / 42 memset(& echoservaddr, 0, sizeof ( echoservaddr ) ) ; 43 echoservaddr. s i n f a m i l y = AF INET ; 44 echoservaddr. s i n a d d r. s addr = i n e t a d d r ( nomeservidor ) ; 45 echoservaddr. s i n p o r t = htons ( numeroporta ) ; 47 / enviar o comando para o s e r v i d o r / 48 sendto ( sock, mensagem, tamanhomensagem+1, 0, 49 ( stru ct sockaddr ) & echoservaddr, 50 sizeof ( echoservaddr ) ) ; 52 / receber uma resposta / 53 fromsize = sizeof ( fromaddr ) ; 54 respstringlen = recvfrom ( sock, echobuffer, ECHOMAX, 0, 55 ( struct sockaddr ) & fromaddr, & fromsize ) ; 10 / 30

UDP usando a linguagem Java 11 / 30 Classes utilizadas DatagramSocket new DatagramSocket (int porta) DatagramPacket new DatagramPacket (byte[] b, int length) new DatagramPacket (byte[] buf, int length, InetAddress address, int port)

Cliente-Servidor UDP em Java 1/3 Códigos retirados do arquivo ServidorUDP.java 12 / 30 18 / I n i c i a l i z a c a o do socket UDP / 19 socket = new DatagramSocket ( 20 new I n t e g e r ( numeroporta ). i n t V a l u e ( ) ) ; 22 / Laco de recebimento de datagramas / 23 while ( t r u e ){ 24 request = n u l l ; 25 r e p l y = n u l l ; 26 buf = new byte [ 1 0 2 4 ] ; 27 28 / Preparacao do Datagrama de Recepcao / 29 request = new DatagramPacket ( buf, buf. length ) ; 31 / Recepcao bloqueante dos dados / 32 socket. receive ( request ) ; 33 34 / Recuperacao do comando / 35 comando = new S t r i n g ( request. getdata ( ), 0, 36 request. getlength ( ) ) ;

Cliente-Servidor UDP em Java 2/3 Códigos retirados do arquivo ServidorUDP.java 13 / 30 43 / Cria datagrama com a resposta / 44 r e p l y = new DatagramPacket ( hora. getbytes ( ), 45 hora. getbytes ( ). length, 46 request. getaddress ( ), 47 request. getport ( ) ) ; 56 / Envia resposta pelo socket UDP / 57 socket. send ( r e p l y ) ;

Cliente-Servidor UDP em Java 3/3 Códigos retirados do arquivo ClienteUDP.java 14 / 30 20 / I n i c i a l i z a c a o de sockets UDP com Datagrama / 21 socket = new DatagramSocket ( ) ; 23 / Configuracao a p a r t i r dos parametros / 24 InetAddress host = InetAddress. getbyname ( nomeservidor ) ; 25 serverport = new I n t e g e r ( numeroporta ). i n t V a l u e ( ) ; 26 byte [ ] m = mensagemenviar. getbytes ( ) ; 27 28 / Criacao do Pacote Datagrama para Envio / 29 request = new DatagramPacket (m, m. length, host, serverport ) ; 31 / Envio propriamente d i t o / 32 socket. send ( request ) ; 34 / Preparacao do Pacote Datagrama para Recepcao / 35 r e p l y = new DatagramPacket ( buf, buf. length ) ; 36 37 / Recepcao do r e t o r n o / 38 socket. receive ( r e p l y ) ;

Cliente-Servidor em TCP 15 / 30 TCP Orientado a conexão (stream) Confiabilidade e Integridade Menos desempenho na comunicação

TCP usando a linguagem C 16 / 30 Principais funções socket (int domain, int type, int protocol) bind (int sockfd, struct sockaddr *addr, socklen t len) listen (int sockfd, int backlog) accept (int sockfd, struct sockaddr *addr, socklen t *addrlen); send (int s, const void *buf, size t len, int flags); recv (int s, void *buf, size t len, int flags); connect (int sockfd, const struct sockaddr *serv addr, socklen t addrlen);

Cliente-Servidor TCP em C 1/4 Códigos retirados do arquivo ServidorTCP.c 17 / 30 36 / Criacao do socket TCP para receber conexoes / 37 i f ( ( servsock = socket ( PF INET, SOCK STREAM, IPPROTO TCP)) <0){ 38 p e r r o r ( socket ( ) falhou ) ; 39 e x i t ( 1 ) ; 40 } 43 / construcao do endereco de conexao / 44 memset(& echoservaddr, 0, sizeof ( echoservaddr ) ) ; 45 echoservaddr. s i n f a m i l y = AF INET ; 46 echoservaddr. s i n a d d r. s addr = h t o n l (INADDR ANY ) ; 47 echoservaddr. s i n p o r t = htons ( numeroporta ) ; 49 / Bind ao endereco l o c a l / 50 i f ( bind ( servsock, ( stru ct sockaddr ) & echoservaddr, 51 sizeof ( echoservaddr ) ) < 0 ) { 52 p e r r o r ( bind ( ) falhou ) ; 53 e x i t ( 1 ) ; 54 }

Cliente-Servidor TCP em C 2/4 Códigos retirados do arquivo ServidorTCP.c 18 / 30 57 / l i s t e n / 58 i f ( l i s t e n ( servsock, MAXPENDING) < 0){ 59 p e r r o r ( l i s t e n ( ) falhou ) ; 60 e x i t ( 1 ) ; 61 } 64 while ( 1 ) { 65 / esperando conexoes com accept / 66 clntlen = sizeof ( echoclntaddr ) ; 67 i f ( ( clntsock = accept ( servsock, 68 ( stru ct sockaddr ) & echoclntaddr, 69 &clntlen ) ) < 0 ) { 70 p e r r o r ( accept ( ) falhou ) ; 71 e x i t ( 1 ) ; 72 }

Cliente-Servidor TCP em C 3/4 Códigos retirados do arquivo ServidorTCP.c 19 / 30 74 / clntsock esta conectado a um c l i e n t e / 75 p r i n t f ( Tratando c l i e n t e %s\n, 76 i n e t n t o a ( echoclntaddr. s i n a d d r ) ) ; 77 while ( 1 ) { 78 i f ( ( tamanhorecebido = recv ( clntsock, comando, 79 RCVBUFSIZE, 0 ) ) < 0 ) { 80 p e r r o r ( recv ( ) falhou \n ) ; 81 e x i t ( 1 ) ; 82 } 94 / enviando dados ao c l i e n t e / 95 i n t k = send ( clntsock, t i m e s t r i n g, sizeof ( t i m e s t r i n g ), 0 ) ;

Cliente-Servidor TCP em C 4/4 Códigos retirados do arquivo ClienteTCP.c 20 / 30 34 / Criacao do Socket TCP / 35 sock = socket ( PF INET, SOCK STREAM, IPPROTO TCP ) ; 37 / construcao do endereco de conexao / 38 memset(& echoservaddr, 0, sizeof ( echoservaddr ) ) ; 39 echoservaddr. s i n f a m i l y = AF INET ; 40 echoservaddr. s i n a d d r. s addr = i n e t a d d r ( enderecoipservidor ) ; 41 echoservaddr. s i n p o r t = htons ( numeroporta ) ; 43 / Conectando ao s e r v i d o r / 44 i f ( connect ( sock, ( struct sockaddr ) & echoservaddr, 45 sizeof ( echoservaddr ) ) < 0 ) { 46 p e r r o r ( connect ( ) falhou : ) ; 47 e x i t ( 1 ) ; 48 }

TCP usando a linguagem Java 21 / 30 Principais Classes ServerSocket (int port) PrintWriter (OutputStream out, boolean autoflush) BufferedReader (Reader in)

Cliente-Servidor TCP em Java 1/2 Códigos retirados do arquivo ServidorTCP.java 22 / 30 20 / I n i c i a l i z a c a o do server socket TCP / 21 serversocket = new ServerSocket ( 22 new I n t e g e r ( numeroporta ). i n t V a l u e ( ) ) ; 24 while ( t r u e ){ 25 / Espera por um c l i e n t e / 26 c l i e n t S o c k e t = serversocket. accept ( ) ; 29 / Preparacao dos f l u x o s de entrada e saida / 30 out = new P r i n t W r i t e r ( c l i e n t S o c k e t. getoutputstream ( ), 31 t r u e ) ; 32 i n = new BufferedReader ( new InputStreamReader ( 33 c l i e n t S o c k e t. getinputstream ( ) ) ) ; 35 / Recuperacao dos comandos / 36 while ( ( comando = i n. readline ( ) )! = n u l l ) { 42 / Escreve na saida a hora / 43 out. p r i n t l n ( hora ) ;

Cliente-Servidor TCP em Java 2/2 Códigos retirados do arquivo ClienteTCP.java 17 / I n i c i a l i z a c a o de socket TCP / 18 socket = new Socket ( nomeservidor, 19 new I n t e g e r ( numeroporta ). i n t V a l u e ( ) ) ; 21 / I n i c i a l i z a c a o dos f l u x o s de entrada e saida / 22 i n = new BufferedReader ( new InputStreamReader ( 23 socket. getinputstream ( ) ) ) ; 24 out = new P r i n t W r i t e r ( socket. getoutputstream ( ), t r u e ) ; 30 while ( ( mensagemenviar = inreader. readline ( ) )! = n u l l ){ 31 32 / Envio da mensagem / 33 out. p r i n t l n ( mensagemenviar ) ; 34 35 / Recebimento da resposta do s e r v i d o r / 36 S t r i n g resposta = i n. readline ( ) ; 45 out. close ( ) ; 46 i n. close ( ) ; 47 socket. close ( ) ; 23 / 30

Multicast Utilizado com suporte da camada Ethernet Quando sem esse suporte, utiliza vários Unicast Conceito de grupo 24 / 30

Multicast usando a linguagem C 25 / 30 Principais funções setsockopt (int s, int level, int optname, const void *optval, socklen t optlen);

Multicast em C 1/3 Códigos retirados do arquivo MulticastReceiver.c 26 / 30 28 i f ( ( sock = socket ( PF INET, SOCK DGRAM, IPPROTO UDP) ) < 0 ) { 29 p r i n t f ( socket ( ) falhou \n ) ; 30 } 32 / c o n s t r u i r a e s t r u t u r a de endereco para o bind / 33 memset(& multicastaddr, 0, sizeof ( multicastaddr ) ) ; 34 multicastaddr. s i n f a m i l y = AF INET ; 35 multicastaddr. s i n a d d r. s addr = h t o n l (INADDR ANY ) ; 36 multicastaddr. s i n p o r t = htons ( m u l t i c a s t P o r t ) ; 38 / bind / 39 i f ( bind ( sock, ( stru ct sockaddr ) & multicastaddr, 40 sizeof ( multicastaddr ) ) < 0 ) { 41 p r i n t f ( bind ( ) falhou \n ) ; 42 }

Multicast em C 2/3 Códigos retirados do arquivo MulticastReceiver.c 27 / 30 44 / a c e r t a r opcoes do m u l t i c a s t / 45 multicastrequest. i m r m u l t i a d d r. s addr = 46 i n e t a d d r ( m u l t i c a s t I P ) ; 47 multicastrequest. i m r i n t e r f a c e. s addr = h t o n l (INADDR ANY ) ; 48 i f ( setsockopt ( sock, IPPROTO IP, IP ADD MEMBERSHIP, 49 ( void ) & multicastrequest, 50 sizeof ( multicastrequest ) ) < 0 ) { 51 p r i n t f ( setsockopt ( ) falhou \n ) ; 52 } 54 / Receive a s i n g l e datagram from the server / 55 while ( 1 ) { 56 i f ( ( recvstringlen = recvfrom ( sock, recvstring, 57 MAXRECVSTRING, 0, NULL, 0 ) ) < 0 ) { 58 p r i n t f ( recvfrom ( ) falhou \n ) ; 59 }

Multicast em C 3/3 Códigos retirados do arquivo MulticastSender.c 28 / 30 30 i f ( ( sock = socket ( PF INET, SOCK DGRAM, IPPROTO UDP) ) < 0 ) { 31 p r i n t f ( socket ( ) falhou \n ) ; 32 } 39 memset ( & multicastaddr, 0, sizeof ( multicastaddr ) ) ; 40 multicastaddr. s i n f a m i l y = AF INET ; 41 multicastaddr. s i n a d d r. s addr = i n e t a d d r ( m u l t i c a s t I P ) ; 42 multicastaddr. s i n p o r t = htons ( m u l t i c a s t P o r t ) ; 50 i n t k = sendto ( sock, sendstring, sendstringlen, 0, 51 ( stru ct sockaddr ) & multicastaddr, 52 sizeof ( multicastaddr ) ) ;

Multicast usando a linguagem Java 29 / 30 Principais classes MulticastSocket (int port) DatagramPacket (byte[] buf, int length)

Multicast em Java 1/3 Códigos retirados do arquivo ServidorMulticast.java 30 / 30 11 MulticastSocket socket = new MulticastSocket ( porta ) ; 12 InetAddress endereco = InetAddress. getbyname ( args [ 1 ] ) ; 13 socket. joingroup ( endereco ) ; 15 while ( t r u e ) { 16 byte [ ] recvdata = new byte [ 1 0 2 4 ] ; 17 DatagramPacket recvpacket ; 18 recvpacket = new DatagramPacket ( recvdata, 19 recvdata. length ) ; 20 socket. receive ( recvpacket ) ; 23 sentence = new S t r i n g ( recvpacket. getdata ( ) ) ; 24 System. out. p r i n t 25 ( recvpacket. getaddress ( ). t o S t r i n g ( ) + : ) ; 26 System. out. p r i n t l n ( sentence ) ;

Multicast em Java 1/3 Códigos retirados do arquivo ClienteMulticast.java 31 / 30 13 MulticastSocket c l i e n t S o c k e t = new MulticastSocket ( ) ; 14 InetAddress endereco = InetAddress. getbyname ( args [ 1 ] ) ; 15 c l i e n t S o c k e t. joingroup ( endereco ) ; 26 sendpacket = new DatagramPacket ( senddata, 27 senddata. length, endereco, porta ) ; 28 c l i e n t S o c k e t. settimetolive ( t t l ) ; 29 c l i e n t S o c k e t. send ( sendpacket ) ; 34 c l i e n t S o c k e t. leavegroup ( endereco ) ; 35 c l i e n t S o c k e t. close ( ) ;

Referências Man pages no Linux para funções C Especificação das classes Java na Internet 32 / 30