38
Prof. Hernani Resumo Programa¸c˜ ao de Sockets em C/C++ TCP UDP Programa¸ ao de Sockets em C/C++ Hernani Costa [email protected] Redes de Comunica¸ ao 2011/2012 Hernani Costa [email protected] TGPSI 09/12 Redes de Comunica¸c˜ ao M´odulo8

Programação de Sockets em C/C++ - student.dei.uc.pthpcosta/rc/rcMod7BAula2.pdf · Carater sticas de um Socket Tipos comuns s~ao: Circuitos virtuais: Recebido pela ordem transmitida,

Embed Size (px)

Citation preview

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Programacao de Sockets emC/C++

Hernani Costa

[email protected]

Redes de Comunicacao 2011/2012

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

1 Programacao de Sockets em C/C++

2 TCP

3 UDP

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Introducao

Os sockets sao um metodo de criar conexao entre processos,independente do protocolo.

Os sockets podem ser:

orientado a conexao ou nao orientada a conexao - Eestabelecida uma conexao antes da comunicacao ou cadapacote descreve o destino?orientado ao pacote ou orientado ao fluxo - Existe limite demensagens ou e um fluxo (stream)?

Fiavel ou Nao Fiavel - As mensagens podem ser perdidas,duplicadas, reordenadas ou corrompidas?

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Caraterısticas de um Socket

Os sockets sao caraterizados pelo seu domınio, tipo eprotocolo de transporte.

Domınios comuns sao:

AF UNIX: o formato do endereco e o caminho UNIXAF INET: o formato do endereco e o host e o numero da porta

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Caraterısticas de um Socket

Tipos comuns sao:

Circuitos virtuais: Recebido pela ordem transmitida, fiavelDatagramas: Ordem arbitraria, nao fiavel

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Caraterısticas de um Socket

Cada tipo de socket tem um ou mais protocolos. Porexemplo:

TCP/IP (circuitos virtuais)

UDP (datagramas)

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Caraterısticas de um Socket

Os sockets orientados a conexao sao utilizados emcomunicacoes cliente-servidor: o servidor espera por umaconexao do cliente

Os sockets nao orientados a conexao sao utilizados emsistemas peer-to-peer: cada processo e simetrico

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

API de Sockets

socket - cria um socket de um domınio dado, tipo e protocolo(por exemplo, como comprar um telefone)

bind - associa um nome ao socket (por exemplo, numero detelefone)

listen - especifica o numero de conexoes que podem estar emespera num socket de um servidor (por exemplo, chamadastelefonicas em espera)

accept - o servidor aceita um pedido de conexao de um cliente(por exemplo, atender o telefone)

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

API de Sockets

connect - o cliente faz o pedido de conexao ao servidor (porexemplo, fazer uma chamada)

send, sendto - escrever para a conexao (por exemplo, falar aotelefone)

recv, recvfrom - ler da conexao (por exemplo, ouvir aotelefone)

shutdown - desligar a conexao

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Comunicacao orientada a conexao

O servidor executa as seguintes acoes:

socket - cria o socket

bind - da o endereco do socket no servidor

listen - especıfica o numero maximo de pedidos de conexoesque podem estar em espera para este processo

accept - estabelece conexao com o cliente especificado

send, recv - equivalente ao a escrita e leitura, mas baseado nofluxo

shutdown - fim da escrita ou leitura

close - liberta as estrutura de dados do kernel

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Cliente TCP

O cliente executa as seguintes acoes:

socket - cria o socket

connect - conecta ao servidor

send, recv - (repetido)

shutdown

close

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Sockets TCP

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Socket API

Retorna um descritor (chamado socket ID) se criado comsucesso, -1 caso contrario

O domain (domınio) e AF INET

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Socket API

O type (tipo) pode ser:

SOCK STREAM - estabelece um circuito virtual para o fluxoSOCK DGRAM - estabelece um datagrama para acomunicacaoSOCK SEQPACKET - estabelece uma conexao fiavel, em doissentidos com um tamanho de mensagem maximo (nao estadisponıvel na maioria das maquinas)

O protocol (protocolo) geralmente e zero, sendo o type e odomain a definir a conexao

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

bind

sid - e o ID do socket

addrPtr - estrutura com o endereco (IP) e porta da maquina

sid - e o tamanho (em bytes) da estrutura *addrPtr

Associa um socket ID a um endereco para que os processospossam comunicar.

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

sockaddr

Sockets especıficos para a internet:

Sockets em UNIX (so funciona entre processos na mesmamaquina):

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

listen

Retorna 0 em caso de sucesso, ou -1 em caso de falha

size e o numero permitido de conexoes pendentes (geralmenteem Unix e limitado a 5)

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

accept

Retorna o ID do socket e o endereco do cliente conectado aosocket.

lenPtr e o endereco do cliente ativo e addrPtr e o tamanhodesse endereco

Espera por um pedido de conexao e quando recebe uma, criaum socket para essa comunicacao

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

send

Envia uma mensagem

Retorna o numero de bytes enviados ou -1 em caso de falha

*bufferPtr e o buffer recebido, len e o tamanho do buffer embytes e flag sao opcoes especiais (geralmente 0)

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

recv

Recebe uma mensagem atraves do buffer bufferPtr com lenbytes

Retorna o numero de bytes recebidos em caso de sucesso, ou-1 em caso de falha

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

shutdown

Funciona como um fecho parcial

Desactiva o envio (how=1 ou how=2) ou a rececao (how=0ou how=2)

Retorna -1 em caso de falha

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

connect

E a primeira funcao que o cliente chama

Especıfica o destino da conexao (addrPtr) e retorna 0 em casode sucesso e -1 em caso de falha

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Conexoes

Uma conexao e definida por:

IP dePorta deProtocoloIP paraPorta para

Assim varias conexoes para partilhar o mesmo IP e porta

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Portas

O iniciador da comunicacao necessita de uma porta fixa parapoder comunicar

Isto significa que algumas portas devem estar reservadas paracertos servicos (por exemplo, portas 20 e 21 para o FTP, 80para HTTP, etc.)

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

API para gerir nomes e enderecos IP

Estrutura hostent - descreve o IP e os nomes do host

gethostbyname - host de uma maquina especıfica

htons, htonl, ntohs, ntohl - ordem dos bytes

inet pton, inet ntop - conversao dos numero do endereco IPdo formato de apresentacao para o formato de rede evice-versa

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

gethostname

Retorna o nome da maquina (hostname) onde este comando eexecutado

Retorna -1 em caso de falha

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Estrutura hostent

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

inet pton

Retorna 1 em caso de sucesso, 0 em caso de erro deapresentacao e -1 em caso de erro

family pode ser AF INET ou AF INET6

strPtr e o endereco IP em string com pontos (por exemplo,193.168.1.1)

addrPtr aponta para o resultado 32 bit (AF INET) ou 128 bit(AF INET6)

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

inet ntop

Retorna 1 em caso de sucesso, 0 em caso de erro deapresentacao e -1 em caso de erro

family pode ser AF INET ou AF INET6

strPtr e o endereco IP em string com pontos (por exemplo,193.168.1.1)

addrPtr aponta para o resultado 32 bit (AF INET) ou 128 bit(AF INET6)

len e o tamanho do destino

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Exemplo: Codigo de um Servidor TCP/IP

Servidor iterativo, apenas recebe uma conexao de cada vez

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Exemplo: Codigo de um Cliente TCP/IP

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Comunicacao sem conexao

A comunicacao e simetrica (peer-to-peer)

socket

bind - e opcional para o iniciador

sendto, recvfrom - (repetido)

shutdown

close

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Comunicacao sem conexao

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Variacoes UDP

Nao e necessario que os dois sockets facam bind

O recetor recebe o endereco do emissor

E possıvel que um socket UDP faca connect

Neste caso, deve ser usado send/recv em vez desendto/recvfrom

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

sendto

Para protocolos sem conexao

Envia uma mensagem (bufferPtr) de tamanho bufferLengthpara o endereco especificado por addrPtr de tamanhoaddrLength

Retorna o numero de bytes enviados em caso de sucesso ou -1em caso de erro

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

recvfrom

Para protocolos sem conexao

Recebe uma mensagem (bufferPtr) de tamanho maximobufferLength do endereco especificado por addrPtr detamanho *addrLengthPtr

Retorna o numero de bytes recebidos em caso de sucesso ou-1 em caso de erro

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Exemplo: Codigo de um Servidor UDP

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8

! Prof. Hernani

Resumo Programacao de Sockets em C/C++ TCP UDP

Exemplo: Codigo de um Cliente UDP

Hernani Costa [email protected]

TGPSI 09/12 Redes de Comunicacao Modulo 8