Servidor UDP Volnys Borges Bernal Departamento de Sistemas Eletrônicos Escola Politécnica da USP

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

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Chamadas UDP. Resumo de Chamadas UDP.

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Resumo das chamadas UDP. Resumo de Chamadas UDP.

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Chamadas UDP. Resumo de Chamadas UDP.

Cliente TCP. Programação sockets. Agenda. Cliente TCP. Chamadas sockets para TCP. Chamada socket() Chamada socket()

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP

Servidor TCP Volnys Borges Bernal Depto de Engenharia de Sistemas Eletrônicos Escola Politécnica da USP

Introdução à Programação Sockets

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

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

Aula de Socket. Rafael De Tommaso do Valle

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

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

Sumário. Introdução ao TCP/IP e à Internet API Sockets para comunicação via redes Exemplos

Programação de Aplicações em. Rede usando Sockets

Soquetes TCP. Jean Ribeiro Damasceno. Escola de Engenharia Universidade Federal Fluminense (UFF) Rua Passo da Pátria, 156 Niterói RJ Brasil

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

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

Programação em Sockets visando verificar a diferença entre transmissão confiável (TCP) e não confiável (UDP)

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

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

Leandro Soares de Sousa (DSc.) Página: Aula 05 - desenvolvimento com sockets

Sistemas Distribuídos

Comunicação entre processos. Sistema centralizado

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

Comunicação entre Processos

Sistemas de Operação Sockets

Redes de Computadores e Aplicações

Resolução de Nomes Volnys Borges Bernal Deparatamento de Sistemas Eletrônicos Escola Politécnica da USP

Leandro Soares de Sousa (DSc.) Página: Parte III

Volnys Bernal 1. Trabalho Chat UDP. PSI 2653 Meios Eletrônicos Interativos I

Programação com Sockets. Redes de Computadores I 2007/2008

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

Volnys Borges Bernal. Agenda. Resolução de Nomes. Introdução à resolução de nomes. Introdução à resolução de nomes

Sistemas Operacionais II

Redes de Computadores

Programação com Sockets

Redes de Computadores

camada de transporte SOCKET TCP UDP

Programação TCP/IP (sockets)

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

Por Fernando Koyanagi

Comunicação entre Processos. 1. Pipes 2. Fifos 3. Sockets

COMUNICAÇÃO ENTRE APLICAÇÕES. Laboratórios de Informática João Paulo Barraca, André Zúquete, Diogo Gomes

MC823 Atividade 1: Cliente/Servidor TCP Iterativo. 3 Modificando o servidor para retornar data e hora

Exercício Programa Mini Web Server

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

Comunicação entre Processos por Troca de Mensagens. Prof. Celso maciel da Costa

MC823 Laboratório de Teleprocessamento e Redes

UNIVERSIDADE ESTADUAL DE PONTA GROSSA SETOR DE CIÊNCIAS AGRÁRIAS E DE TECNOLOGIA DEPARTAMENTO DE INFORMÁTICA ENGENHARIA DE COMPUTAÇÃO

Programação Orientada a Objetos para Redes de Computadores

Programação Orientada a Objetos para Redes de Computadores. Modelo Cliente-Servidor. Comunicação entre Processos. O que é um Socket?

Sistemas Operacionais:

Comunicação entre Processos

Sockets: Sumário. Resumo das Propriedades de UDP e de TCP

sockets interprocess communication Taisy Weber

Modelo Cliente/Servidor e Introdução a Sockets

Projeto e Desenvolvimento de Aplicações Cliente / Servidoras Para a INTERNET

Camada de Transporte Protocolos TCP e UDP

API de Sockets. Modelo Cliente/Servidor (2/2) Modelo Cliente/Servidor (1/2) José Pedro Oliveira Sistemas Operativos I

INF01018 Aula Prática 1 Cliente-Servidor e Multicast

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

Problemas relacionados a exclusão mútua

Sockets e Threads em Java

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

SEM 544 Desenvolvimento de Produtos Mecatrônicos

Agenda. Rede de Computadores (Técnico em Informática) Protocolo TCP Transmission Control Protocol. Introdução ao Protocolo TCP

Sockets IPv6 para C/C++ - Criando e Portando Aplicações

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

Programação com sockets (em Java)

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

Módulo 3 Nível Transporte

Redes de Computadores

Trabalho 02: Cliente e Servidor em C

Threads. Agenda. Threads. Processo. Processo. Processo. Processo. (c) Volnys B. Bernal Versão de 22/3/2012

21/11/16. Histórico. Interfaces e Periféricos Redes como interfaces. Abstração da infraestrutura de rede como interface

Programando sistemas distribuídos com objetos distribuídos na rede TCP/IP. Prof. Me. Sérgio Carlos Portari Júnior

Comunicação. Carlos A. G. Ferraz 25/6/2003. Sistemas Distribuídos 1. Tópicos. Camadas. Transmissão de dados. Marshalling/Unmarshalling.

Módulo 08 - Protocolo IP Página 1. Tecnologia de Redes. Volnys B. Bernal Versão de 15/06/2000. Agenda. Tecnologia de Redes

Desenvolvimento de Produtos Mecatrônicos

Canais de Comunicação

Protocolo TCP. Redes TCP-IP. Agenda. Protocolo TCP Transmission Control Protocol. Introdução ao Protocolo TCP. Introdução ao Protocolo TCP

Tecnologia de Redes. NAT e Masquerade

PROTOCOLOS DE COMUNICAÇÃO

FUNDAMENTOS DE REDES DE COMPUTADORES Unidade 5 Camada de Transporte e Aplicação. Luiz Leão

Redes de Computadores. Prof. André Y. Kusumoto

! Introdução! Pacote TCP! Número de Seqüência TCP! Estados TCP. " Estabelecimento de conexão " Troca de dados " Encerramento de conexão. !

AInterface que um aplicativo utiliza quanto interage com um módulo implementado por outro software

Sistemas de Operação (2018/2019) Ficha 6

Protocolos de Aplicação

Protocolos de Aplicação

Programação paralela em UNIX. Aleardo Manacero Jr.

Tecnologia de Redes. Arquitetura de Rede de Computadores

TRANSPORTE. Prof. Me. Hélio Esperidião

Relatório do Laboratório 3

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

Agenda. Protocolo TCP. Introdução ao Protocolo TCP. Introdução ao Protocolo TCP. Introdução ao Protocolo TCP. Introdução ao protocolo TCP: Exemplo

Sistemas Distribuídos Aula 2

Transcrição:

2004-2017 Volnys Bernal 1 Servidor UDP Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos Escola Politécnica da USP

2004-2017 Volnys Bernal 2 Resumo das Chamadas UDP

2004-2017 Volnys Bernal 3 Resumo de Chamadas UDP Lado Cliente Lado Servidor socket() connect() Pré define o parceiro de comunicação para todo send() socket() bind() send() recvfrom() recv() sendto() close() close()

2004-2017 Volnys Bernal 4 Resumo de Chamadas UDP Lado Cliente Lado Servidor socket() Informa o parceiro de comunicação a cada chamada socket() bind() sendto() recvfrom() recvfrom() sendto() close() close()

Chamada socket() 2004-2017 Volnys Bernal 5

2004-2017 Volnys Bernal 6 Chamada socket() Objetivo Criar um novo socket (plug de comunicação) Resultado Retorna o descritor de arquivo (número inteiro). Sintaxe sd = socket (int domain, int type, int protocol) Observação: Quando um socket é criado, não possui nenhuma informação sobre os socketaddres (local e dos parceiros). Os endereços IP e portas são informados nas chamadas: Lado servidor: bind() - define enderço local Lado cliente: connect() ou sendto() define endereço do parceiro

2004-2017 Volnys Bernal 7 Chamada socket() Sintaxe geral #include <sys/socket.h> int socket(int domain, int type, int protocol) Socket descriptor Para PF_INET usar 0 Pilha de protocolos: PF_LOCAL (file) PF_INET (IPv4) PF_INET6 (IPv6) PF_X25 (X25) Tipo da comunicação: SOCK_STREAM (TCP) SOCK_DGRAM (UDP) SOCK_RAW (IP)

2004-2017 Volnys Bernal 8 Chamada socket() Tipo de serviço SOCK_STREAM Para ser utilizado com o protocolo TCP Canal de comunicação full duplex Orientada a conexão Fluxo de bytes sem delimitação Comunicação confiável: sem perda de dados, sem duplicação, entrega na ordem Chamadas para transmissão e recepção de dados: read(), write() ou send(), recv() SOCK_DGRAM Para ser utilizado com o protocolo UDP Datagrama (mensagens) Chamadas para trasnmissão e recepção de dados: send(), recv() SOCK_RAW Permite acesso a protocolos de mais baixo nível Datagrama (mensagens) Chamadas para trasnmissão e recepção de dados: send(), recv()

2004-2017 Volnys Bernal 9 Chamada socket() Para criar um socket TCP #include <sys/socket.h> sd = socket(af_inet, SOCK_STREAM, 0); Para criar um socket UDP #include <sys/socket.h> sd = socket(af_inet, SOCK_DGRAM, 0); Para criar um socket Raw #include <sys/socket.h> sd = socket(af_inet, SOCK_RAW, protocol);

2004-2017 Volnys Bernal 10 Chamada socket() Exemplo de criação de socket UDP #include <sys/socket.h> int sd; // socket descriptor... sd = socket(pf_inet, SOCK_DGRAM, 0); if (sd == -1) { perror( Erro na chamada socket ); exit(1); }...

Chamada bind() 2004-2017 Volnys Bernal 11

2004-2017 Volnys Bernal 12 Chamada bind() Objetivo Permite associar um socket address (IP+porta) ao socket Deve ser utilizado no lado servidor Resultado Retorna 1 no caso de erro

2004-2017 Volnys Bernal 13 Chamada bind() Sintaxe #include <netdb.h> Endereço IP da interface local. Pode ser o endereço IP de: Uma interface específica Todas interfaces locais(inaddr_any) int bind( int sd, struct sockaddr *myaddr, socklen_t addrlen) Resultado da chamada: sucesso ou erro Descritor do socket Tamanho da estrutura de endereço (sockaddr)

2004-2017 Volnys Bernal 14 Chamada bind() #include <netdb.h> struct sockaddr_in mylocal_addr... mylocal_addr.sin_family = AF_INET; mylocal_addr.sin_addr.s_addr = INADDR_ANY; mylocal_addr.sin_port = htons(myport); status = bind (sd, (struct sockaddr *) &mylocal_addr, sizeof(struct sockaddr_in)); if (status == -1) perror( Erro na chamada bind );

Chamada recvfrom() 2004-2017 Volnys Bernal 15

2004-2017 Volnys Bernal 16 Chamada recvfrom() Recebimento de datagramas Permite obter a identificação do parceiro Pode ser utilizado pelo cliente ou servidor Socket Descriptor Ponteiro para buffer da mensagem Tamanho do buffer int recvfrom(int sd, void * buffer, int buffersize, int flags, struct sockaddr *from, int *sockaddrsize) Endereço da origem Tamanho da estrutura sockaddr Opções

2004-2017 Volnys Bernal 17 Chamada recvfrom() Exemplo: char rxbuffer[80]; struct sockaddr_in fromaddr; // sockaddr do cliente int size;... size = sizeof(struct sockaddr_in); status = recvfrom(sd, rxbuffer, sizeof(rxbuffer), 0, (struct sockaddr *) &fromaddr, &size); if (status <= 0) perror( Erro na chamada recvfrom );...

2004-2017 Volnys Bernal 18 Chamada recvfrom() Bloqueante Se não existirem mensagens na fila de recepção o processo fica aguardando sua chegada Exceção: quando o socket for criado como não bloqueante (ver fcntl(2)). Retorno Se a chamada tiver sucesso, o valor retornado é o tamanho do datagrama

Chamada sendto() 2004-2017 Volnys Bernal 19

2004-2017 Volnys Bernal 20 Chamada sendto() Função para transmissão de dados (datagramas) Para um destino especificado Não deve ser precedido por connect() Pode ser utilizado pelo cliente ou pelo servidor Socket Descriptor Ponteiro para buffer da mensagem Tamanho da mensagem int sendto(int sd, void *txbuffer, int msgsize, int flags, struct sockaddr *to, int sockaddrsize) Opções Endereço do destino Tamanho da estrutura sockaddr

2004-2017 Volnys Bernal 21 Chamada sendto() Exemplo:... status = sendto (sd, buffer, strlen(buffer)+1, 0, (struct sockaddr *) &fromaddr, sizeof(struct sockaddr)) if (status <= 0) perror( Erro na chamada sendto );...

Chamada close() 2004-2017 Volnys Bernal 22

2004-2017 Volnys Bernal 23 Chamada close() Objetivo Fechar o socket. Se ainda existirem dados para serem transmitidos pelo socket, aguarda por alguns segundos a finalização desta transmissão. Resultado Fecha o descritor do arquivo. Sintaxe int socket(int sd)

2004-2017 Volnys Bernal 24 Chamada close() Exemplo: int sd; // socketdescriptor... status = close(sd); if (status == -1) perror( Erro na chamada close );...

Exercício 2004-2017 Volnys Bernal 25

2004-2017 Volnys Bernal 26 Exercício (1) Implemente um servidor para o serviço echo utilizando o protocolo UDP. O serviço UDP echo responde exatamente com a seqüência ASCII recebida.

2004-2017 Volnys Bernal 27 Servidor Não Concorrente x Concorrente

2004-2017 Volnys Bernal 28 Servidor não concorrente x concorrente Servidor não concorrente Processa uma requisição por vez Servidor concorrente Possui capacidade para processar várias requisições simultaneamente Necessário quando o processamento da requisição for demorado e existir a possibilidade de chegar várias requisições simultâneas Implementação mais complexa, com duas alternativas: Uso de chamadas não bloqueantes Uso de programação multithreaded

2004-2017 Volnys Bernal 29 Servidor UDP convencional Lado Cliente socket() connect() send() Lado Servidor (convencional) socket() bind() recvfrom() recv() sendto() close() close()

2004-2017 Volnys Bernal 30 Servidor UDP concorrente Lado Cliente socket() connect() Lado Servidor (concorrente) socket() bind() send() recvfrom() processa processa recv() sendto() sendto() close() close()

Exercício 2004-2017 Volnys Bernal 31

2004-2017 Volnys Bernal 32 Exercício (3) Implementar um servidor UDP concorrente que realiza o seguinte processamento: #include <time.h> void processar(char* str_in, char* str_out) { time_t now_time; struct tm now_tm; char str_inicio[40]; char str_fim[40]; now_time = time(null); // Obtém instante (data/hora) corrente now_tm = *localtime(&now); // Converte para hora local // Formata data/hora: "ddd yyyy-mm-dd hh:mm:ss zzz" strftime(str_inicio,sizeof(str_inicio),"%a %d/%m/%y %H:%M:%S %Z",&now_tm); sleep(60); now_time = time(null); // Obtém instante (data/hora) corrente now_tm = *localtime(&now); // Converte para hora local strftime(str_fim,sizeof(str_inicio),"%a %d/%m/%y %H:%M:%S %Z", &now_tm); sprintf(str_out, %s: Inicio: %s, fim: %s, str_in, str_inicio, str_fim); }

Referências Bibliográficas 2004-2017 Volnys Bernal 33

2004-2017 Volnys Bernal 34 Referências Bibliográficas COMMER, DOUGLAS; STEVENS, DAVID Internetworking with TCP/IP: volume 3: client-server programming and applications Prentice Hall 1993