Upload
tranhanh
View
216
Download
0
Embed Size (px)
Citation preview
! Prof. Hernani
Resumo Programacao de Sockets em C/C++ TCP UDP
Programacao de Sockets emC/C++
Hernani Costa
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