Aula de Socket. Rafael De Tommaso do Valle

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

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

Programação TCP/IP (sockets)

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

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

sockets interprocess communication Taisy Weber

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

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

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

Um Tutorial sobre Sockets Parte I

Sistemas de Operação Sockets

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

Sistemas Distribuídos

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

Modelo Cliente/Servidor e Introdução a Sockets

Programação com Sockets

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

Redes de Computadores e Aplicações

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

Programação. Para estas funções, é necessário incluir a biblioteca: Seguem as operações mais comuns com arquivos.

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

INF01018 Aula Prática 1 Cliente-Servidor e Multicast

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

Módulo 3 Nível Transporte

Sockets IPv6 para C/C++ - Criando e Portando 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

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

Sockets e Threads em Java

Redes de Computadores. Lab 2 - Computer Networks

MC823 Laboratório de Teleprocessamento e Redes

Relatório do Laboratório 3

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

Protocolos de Aplicação

Canais de Comunicação

Sistemas Operacionais:

Resumo das Propriedades de UDP e de TCP

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

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

Redes de Computadores I

Programação com sockets (em Java)

Tutorial de Sockets - Parte I Por: Frederico Perim

PROTOCOLOS DE COMUNICAÇÃO

Trabalho 02: Cliente e Servidor em C

REDES DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

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

Camada de Transporte Protocolos TCP e UDP

Transcrição:

Aula de Socket Rafael De Tommaso do Valle 20 de agosto de 2009

Socket O que é um socket? É uma interface com qual processos em diferentes hosts se comunicam através da rede; Também chamado de interface de programação da aplicação (API); Um socket é a interface entre a camada de aplicação e a de transporte da rede. Internet sockets (nosso interesse): UDP não orientado à conexão (Datagram Sockets) TCP orientado à conexão (Stream Sockets)

Sockets em C Para programação de sockets será utilizada a linguagem C; Possui um conjunto de funções para a criação de sockets; Os sockets deverão ser executados em Sistemas Unix.

Estrutura file:///home/rafael.valle/desktop/sockets.png

Endereçamento Estrutura de endereçamento struct sockaddr_in{ short int sin_family; unsigned short int sin_port; struct in_addr sin_addr; unsigned char sin_zero[8]; } O primeiro item da estrutura define o tipo de família do protocolo a ser usado (AF_INET). O segundo indica o número da porta TCP ou UDP usada na comunicação entre os processos. Para se atribuir o valor a este item, é necessário usar uma função que transforma a representação de dados do host na representação de dados da rede.

Endereçamento Mas como fazer isso? sin.sin_port = htons (SERVER_PORT); onde SERVER_PORT é o número da porta a ser utilizada. O terceiro item é o endereço IP do host de destino. No caso do servidor, utiliza-se a constante INADDR_ANY. Nos clientes usaremos a função inet_addr() ou gethostbyname(). O quarto item sin_zero existe para zerar a parte da estrutura que não foi usada, já que é alocado espaço para o maior tamanho de endereço possível.

Funções Criação do socket Função socket() int socket(int family, int type, int protocol); int family: indica a família de protocolos que será utilizada (PF_INET). int type: define o tipo de socket a ser criado (para UDP, SOCK_DGRAM e para TCP, SOCK_STREAM). int protocol: identifica o protocolo específico a ser usado. Neste caso será nulo, já que os dois primeiros argumentos já identificam exclusivamente o protocolo. Se o socket é criado, retorna o descritor de arquivos para este socket, caso contrário retorna um valor negativo.

Funções Associação do socket a uma porta Função bind() int bind(int socket, struct sockaddr *address, int addr_len); int socket: é o socket criado pela função socket(). struct sockaddr *address: é a estrutura de endereçamento que contém as informações necessárias para o estabelecimento da associação. int addr_len: é o tamanho dessa estrutura, pois, dependendo da família e do protocolo utilizados, ele varia. Retorna um valor negativo em caso de insucesso.

Funções TCP Fila de Conexões Pendentes Função listen() Instrui o socket a esperar pela conexão de um cliente. int listen(int socket, int backlog); Estabelecimento da Conexão Função accept() Aceita conexão com o cliente. int accept(int socket, struct sockaddr *address, int *addr_len); Conexão Função connect() Usado pelo cliente para estabelecer conexão com o servidor int connect(int socket, struct sockaddr *address, int addr_len);

Função de envio UDP Envio de mensagens usando UDP Função sendto() ssize_t = sendto(int socket, char *message, int msg_len, int flags, struct sockaddr *address, int addr_len); char *message: é o endereço da variável onde se encontra a mensagem que se deseja transmitir pelo socket. int msg_len: tamanho dessa mensagem. int flags: é um conjunto de flags que controlam certos detalhes da operação mas que podem receber um valor nulo. struct sockaddr *address: estrutura de endereçamento de destino. int addr_len: tamanho da estrutura de endereçamento (sizeof address). Retorna o número de bytes enviados ou 1, em caso de erro.

Função de recepção UDP Recepção de mensagens usando UDP Função recvfrom() ssize_t = recvfrom(int socket, char *buffer, int buffer_len, int flags, struct sockaddr *address, int *addr_len); Argumentos similares a função sendto(); A função retorna, além do datagrama recebido (no segundo argumento), a estrutura de endereçamento da origem de forma que o destino possa enviar-lhe uma resposta (quinto argumento) e o número de bytes da área de dados recebidos ou 1 em caso de erro.

Funções Fechando o socket Função close() int close(int socket); A função retorna um valor nulo em caso de sucesso. Bibliotecas Para usar estas funções, devem ser incluídas as seguintes bibliotecas: #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h>

Referências Computer Networks A System Approach Larry Peterson & Bruce Davie Morgan Kauffman 2ª edição (exemplo de um programa cliente e de um programa servidor usando TCP Capítulo 1 Pasta 635 na Xerox da Ângela) Unix Network Programming Richard Stevens Prentice Hall 2ª edição Volume 1 (referências sobre programação de interfaces socket) Beej's Guide to Network Programming, Using Internet Sockets - Brian "Beej Jorgensen" Hall - http://beej.us/guide/bgnet/output/html/multipage/index.html

Exemplo Socket UDP: Dois arquivos: Servidor: que espera por mensagens na porta 5000; Cliente: que envia mensagens a esse servidor.