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

Documentos relacionados
Introdução à Programação Sockets

Aula de Socket. Rafael De Tommaso do Valle

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

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

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

Sistemas de Operação Sockets

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

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

Modelo Cliente/Servidor e Introdução a Sockets

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

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

Programação TCP/IP (sockets)

Comunicação entre processos. Sistema centralizado

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

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

sockets interprocess communication Taisy Weber

Comunicação entre Processos

Sistemas Operacionais:

Redes de Computadores

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

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

Sockets e Threads em Java

MC823 Laboratório de Teleprocessamento e Redes

1 Projeto de software de clientes. 1

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

Programação com sockets (em Java)

INF01018 Aula Prática 1 Cliente-Servidor e Multicast

3. Projeto e implementação de Servidores

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

29-Aug-07. Histórico. Interfaces e Periféricos Redes como interfaces. Abstração da infraestrutura de rede como interface

Sistemas Distribuídos (Parte 4 - Aplicação Distribuída)

Resumo das Propriedades de UDP e de TCP

Um Tutorial sobre Sockets Parte I

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

Comunicação Inter-Processo em Unix. Pipes FIFO (Named Pipes) Pipes

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

Camada de Transporte Protocolos TCP e UDP

UMA ABORDAGEM SOBRE A INTERFACE DE PROGRAMAÇÃO DE APLICAÇÕES SOCKETS E A IMPLEMENTAÇÃO DE UM SERVIDOR HTTP

Comunicação entre pai e filho

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

Redes de Computadores. 1 Questões de múltipla escolha. TE090 - Prof. Pedroso. 30 de novembro de Exercício 1: Considere:

Obter conhecimentos básicos sobre programação socket para desenvolver softwares clientes.

Eng.ª Informática. Redes de Computadores. Frequência. 4 de Julho de 2006

Redes de Computadores (PPGI/UFRJ)

PROTOCOLOS DE COMUNICAÇÃO

Programação em C/C++

Sincronização e Comunicação Problemas Clássicos

Relatório do Laboratório 3

Redes de Computadores I

Estruturas de Dados. Módulo 15 - Arquivos. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

Redes de Computadores

Protocolos de Aplicação

Agenda. Tecnologia de Redes. NAT e Masquerade. Introdução. Introdução. Firewalls. Introdução NAT Masquerade

Protocolos de Aplicação

Outline. 33. Manipulação de arquivos DIM

Canais de Comunicação

Capítulo 2. Camada de aplicação

Tutorial de Sockets - Parte I Por: Frederico Perim

Roteiro... Sistemas Distribuídos Aula 4. Troca de mensagens. Comunicação entre processos. Conceitos de SD, vantagens e desvantagens

Resolução de Nomes e Endereços


Sistemas Operacionais II Unix: Memória e E/S. Geraldo Braz Junior

Serviços de Comunicações Capítulo 3

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

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

Comunicação entre Processos Canal de comunicação Arquitetura da comunicação Modelos de comunicação

Estruturas de Dados Aula 6: Cadeias de 28/03/2010

Redes TCP-IP. Protocolo ICMP. Pilha TCP/IP. Protocolo ICMP Internet Control Message Protocol. Introdução ao Protocolo ICMP

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

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

Manipulação de Arquivos

Sistemas Distribuídos Capítulo 4 - Aula 5

V JOLIM. C e Linux Dicas e Truques. Márcio Fuckner marciofk@ppgia.pucpr.br

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

Introdução a Programação de Jogos

Arquitetura de sistemas distribuídos

Objetivo. Processamento Paralelo Middleware. Cliente/Servidor. Histórico. Cliente/Servidor. Programação de sistemas distribuídos

Redes de Computadores

Ambientes de Execução

INF 1620 P1-14/04/07 Questão 1 Nome:

TP4. Apoio ao projeto 4: tópicos avançados de sockets

Terminologia. computador onde executam aplicações do usuário ou do sistema. que solicita serviços a um Servidor em benefício de um usuário.

Protocolos e Arquiteturas de Redes. Thiago Leite

UM SERVIDOR DE ARQUIVOS PARA UM CLUSTER DE COMPUTADORES

Message Passing Interface - MPI

INF 1005 Programação I

16-Apr-08. Objetivo. Processamento Paralelo Middleware. Histórico. Cliente/Servidor. Cliente/Servidor

Arquitetura de Computadores Sistemas Operacionais II

Protocolos de Rede. Protocolos em camadas

Fundamentos de Sistemas Operacionais

Aplicações com Banco de Dados e Cliente-Servidor

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

Redes TCP/IP. Prof. M.Sc. Alexandre Fraga de Araújo. INSTITUTO FEDERAL DO ESPÍRITO SANTO Campus Cachoeiro de Itapemirim

UNIVERSIDADE DO TOCANTINS TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PRÁTICA EM PROGRAMAÇÃO DE SISTEMAS

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

Tecnologia de Redes. Arquitetura de Rede de Computadores

Java 2 Standard Edition Fundamentos de

Programação de Sistemas. Sockets. Programação de Sistemas Sockets : 1/66

Sistemas Distribuídos

Transcrição:

2004-2016 Volnys Bernal 1 2004-2016 Volnys Bernal 2 Resumo das Chamadas TCP Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos Escola Politécnica da USP Resumo das Chamadas TCP Lado Cliente Lado Servidor 2004-2016 Volnys Bernal 3 Resumo das Chamadas TCP 2004-2016 Volnys Bernal 4 connect() Detalhamento Lado Servidor Atende somente uma conexão 2004-2016 Volnys Bernal 5 2004-2016 Volnys Bernal 6 Resumo das Chamadas TCP Chamada Detalhamento Lado Servidor Atende múltiplas conexões, uma de cada vez

2004-2016 Volnys Bernal 7 2004-2016 Volnys Bernal 8 Chamada Criar um novo socket (plug de comunicação). Aloca estruturas de dados no sistema operacional para suportar a comunicação. Resultado Retorna o descritor de arquivo (número inteiro). sd = socket (int domain, int type, int protocol) Chamada geral #include <sys/socket.h> int socket(int domain, int type, int protocol) Socket descriptor Para PF_INET use 0 Se SOCK_DGRAM - UDP Se SOCK_STREAM - TCP Observação: Quando um socket é criado, não possui nenhuma informação sobre o parsocket (endereços IPs e portas dos parceiros). 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-2016 Volnys Bernal 9 2004-2016 Volnys Bernal 10 Chamada Chamada Tipo de serviço SOCK_STREAM Para ser utilizado com o protocolo TCP Canal de comunicação full duplex Fluxo de bytes sem delimitação Chamadas para transmissão e recepção de dados:, ou send(), recv() SOCK_DGRAM Para ser utilizado com o protocolo UDP Datagrama (mensagens) Chamadas para trasnmissão e recepção de dados: send(), sendfrom(), recv() ou recvfrom() 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); 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-2016 Volnys Bernal 11 2004-2016 Volnys Bernal 12 Chamada Exemplo de criação de socket TCP #include <sys/socket.h> int sd; sd = socket(pf_inet, SOCK_STREAM, 0) // TCP if (sd == -1) { perror( Erro na chamada socket ); exit(1); } Chamada

2004-2016 Volnys Bernal 13 2004-2016 Volnys Bernal 14 Chamada Chamada Definir o socket address local (end. IP e porta TCP) Deve ser utilizado somente no lado servidor 1: erro 0: sucesso #include <netdb.h> int Resultado da chamada: sucesso ou erro bind( int sd, struct sockaddr *myaddr, socklen_t addrlen) Descritor do socket Socket addres local: Endereço IP da interface local e e porta TCP pela qual o servidor TCP irá aguardar conexões. Tamanho da estrutura de endereço (sockaddr) 2004-2016 Volnys Bernal 15 2004-2016 Volnys Bernal 16 Chamada Chamada #include <netdb.h> Socket address local O endereço IP do socket address do servidor pode ser: Aquele associado a uma das interfaces do servidor Todas interfaces locais (utilizar macro INADDR_ANY) 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(socketdescriptor, (struct sockaddr *) &mylocal_addr, sizeof(struct sockaddr_in)); if (status == -1) perror( Erro na chamada bind ); 2004-2016 Volnys Bernal 17 2004-2016 Volnys Bernal 18 Chamada Chamada Abrir a porta na qual o servidor ira aguardar conexões TCP As conexões são aceitas através da ativação de 0: sucesso

2004-2016 Volnys Bernal 19 2004-2016 Volnys Bernal 20 Chamada Resultado da função: 0: sucesso Descritor do socket int listen(int sd, int queuelenght) Qde máxima de conexões pendentes sem aceite Chamada Exemplo: #define QLEN 10... status = listen(sd,qlen); if (status!= 0) { perror("erro na chamada "); exit(1); } 2004-2016 Volnys Bernal 21 2004-2016 Volnys Bernal 22 Chamada Chamada Aceitar uma nova conexão TCP. Accept() extrai a primeira conexão da fila e gera um novo socket descriptor para esta conexão. O socket descriptor original não é afetado por esta chamada. Um dos parâmetros informa o socket address do cliente Valor não negativo: sucesso, sendo este o valor do novo socket descriptor 2004-2016 Volnys Bernal 23 2004-2016 Volnys Bernal 24 Chamada Valor retornado: Positivo: sucesso, correspondendo ao valor do novo socket int accept (int sd, struct sockaddr *addr, socklen_t *addrlen) Tamanho da estrutura socketaddr (precisa ser uma variável!) Descritor do socket Ponteiro para uma estrutura sockaddr que conterá o endereço (socket address) do parceiro de comunicação Chamada Exemplo int newsd; int size; struct sockaddr_in clientaddr;... size = sizeof(clientaddr); newsd = accept( sd, (struct sockaddr *) &clientaddr, (socklen_t *) &size); if (newsd < 0) { perror("erro na chamada "); exit(1); }...

2004-2016 Volnys Bernal 25 2004-2016 Volnys Bernal 26 Chamada Chamada Recepção/leitura de dados de um descritor Descritor: descritor sockets, descritor de arquivo,... Pode ser utilizada por cliente ou servidor >0: quantidade de bytes lidos 0: end of file 2004-2016 Volnys Bernal 27 2004-2016 Volnys Bernal 28 Chamada Chamada : Exemplo: #include <unistd.h> int read(int sd, void *buf, int buffersize) Socket Descriptor Ponteiro para o buffer (end. do buffer de recepção) Tamanho do buffer char rxbuffer[80]; status = read(newsd,rxbuffer,sizeof(rxbuffer)); if (status == -1) perror( Erro na chamada read ); printf( MSG recebida: %s\n,rxbuffer); 2004-2016 Volnys Bernal 29 2004-2016 Volnys Bernal 30 Chamada Chamada Transmissão/escrita de dados em um descritor Descritor: descritor sockets, descritor de arquivo,... Pode ser utilizada por cliente ou servidor Positivo: quantidade de bytes escritos

2004-2016 Volnys Bernal 31 2004-2016 Volnys Bernal 32 Chamada Chamada Exemplo: #include <unistd.h> int write(int sd, void *buf, int count) #include <unistd.h> char txbuffer[80]; Socket Descriptor Ponteiro para mensagem (end. do buffer da mensagem) Tamanho da mensagem status =write(newsd,txbuffer,strlen(txbuffer)+1) if (status == -1) perror( Erro na chamada write ); 2004-2016 Volnys Bernal 33 2004-2016 Volnys Bernal 34 Chamada Chamada Permite fechar o socket (assim como é feito com arquivo) Existem dois sockets abertos. É importante fechar os dois sockets. Código de exemplo para fechar um socket: int sd; // socketdescriptor status = close(sd); if (status == -1) perror( Erro na chamada close ); 2004-2016 Volnys Bernal 35 2004-2016 Volnys Bernal 36 1. Implemente um servidor TCP echo que transforma para maiúsculas. O programa deve atender a um cliente TCP e, quando receber a mensagem quit deve encerrar a conexão com o cliente e terminar o programa Dicas: Utilize a rotina de biblioteca toupper() para converter um caractere minúsculo para maiúsculo. Utilize a rotina de biblioteca strcmp() para comparar a string recebida com quit. #include <string.h> If (strcmp(bufferp, quit )==0) /* igual */

2004-2016 Volnys Bernal 37 2004-2016 Volnys Bernal 38 Servidor não concorrente x servidor concorrente 2004-2016 Volnys Bernal 39 2004-2016 Volnys Bernal 40 Servidor não concorrente x concorrente Servidor não concorrente x concorrente Não concorrente Processa uma requisição por vez não concorrente Concorrente Tem capacidade para r mais que uma requisição simultaneamente Mais complexo Mais difícil de implementar Necessita uma implementação multithreaded 2004-2016 Volnys Bernal 41 2004-2016 Volnys Bernal 42 Servidor não concorrente x concorrente concorrente thread thread sd3

2004-2016 Volnys Bernal 43 2004-2016 Volnys Bernal 44 Servidor 2. Fazer um servidor TCP echo concorrente. Dica: existem diversas formas de implementar o controle dos threads: Cliente (1) Estabelecimento de conexão Main sockets (a) Utilizar uma tabela de controle de conexões estabelecidas com cada entrada da tabela contendo os seguintes campos: ocupado, estrutura dos threads (thread_t), semáforo para o thread e socket (new socket). 1 (b) Utilizar a estrutura produtor-consumidor. O produtor é o thread principal: produz novas conexões (socket descriptors). O consumidor são os threads de trabalho: consomem conexões (socket descriptors). Um consumidor, ao receber o socket descriptor fica responsável pela interação com o cliente até que a conexão seja encerrada. 2 3 2004-2016 Volnys Bernal 45 2004-2016 Volnys Bernal 46 Servidor Cliente Main sockets Referências Bibliográficas 1 (2) dados 2 3 2004-2016 Volnys Bernal 47 Referências Bibliográficas COMMER, DOUGLAS; STEVENS, DAVID Internetworking with TCP/IP: volume 3: client-server programming and applications Prentice Hall 1993