Buscar

10 - prog-rede-socket

Prévia do material em texto

Italo Valcy Programação em C, 2013.1
Programação C
Italo Valcy <italo@dcc.ufba.br>
Aula 10 – Programação em rede (Socket)
Italo Valcy Programação em C, 2013.1 2 / 27
Todo o material aqui disponível pode, posteriormente, ser utilizado sobre os termos da:
Creative Commons License: 
Atribuição - Uso não comercial - Permanência da Licença
http://creativecommons.org/licenses/by-nc-sa/3.0/
Licença de uso e distribuição
Italo Valcy Programação em C, 2013.1 3 / 27
Motivação
Como duas aplicações distintas (dois 
processos) podem trocar informações entre si?
Italo Valcy Programação em C, 2013.1 4 / 27
Motivação
Como duas aplicações distintas (dois 
processos) podem trocar informações entre si?
Região de memória compartilhada
Qual endereço usar?
Como permitir que outros processos acessem?
Arquivo com acesso compartilhado
Como tratar acesso concorrente?
O desempenho é satisfatório?
Italo Valcy Programação em C, 2013.1 5 / 27
Motivação
Como duas aplicações distintas (dois 
processos) podem trocar informações entre si?
Proposta: uso de sockets
Unix domain sockets: escopo de comunicação apenas 
local
Internet sockets: escopo de comunicação em rede 
(máquinas diferentes, até geograficamente distantes)
Italo Valcy Programação em C, 2013.1 6 / 27
Observações
Estudaremos apenas internet sockets
Esse material foi desenvolvido para mostrar o 
uso de sockets, com a biblioteca socket.h 
(POSIX sockets, antiga BSD sockets)
Nativa no Linux e BSD
No Windows:
Winsock (API ligeiramente diferente)
Cygwin (lib de emulação do Unix)
Italo Valcy Programação em C, 2013.1 7 / 27
Introdução
Algumas premissas da Internet
Necessidade de interoperabilidade (protocolos)
Cada host é unicamente identificado (IP = Internet 
Protocol)
Facilidade na adição de funcionalidades e 
separação de papéis (camadas, TCP/IP)
Um host (IP) pode hospedar diversos serviços 
(porta virtual)
Dentre outras premissas...
Italo Valcy Programação em C, 2013.1 8 / 27
Introdução
Número que identifica unicamente um host na internet 
(uma máquina, um servidor, um serviço, um dispositivo 
móvel, etc.)
Formato: A.B.C.D (variando de 0 - 255)
192.168.0.1
200.128.0.31
189.238.12.260
Esgotamento IPv4: surgimento IPv6
2801:86:0:1:dad0:faca:b01a:ca5a
É preciso conhecer o IP do peer/servidor
Como saber o IP de um site? (disciplinas.dcc.ufba.br/MATA57)
Endereço IP
Italo Valcy Programação em C, 2013.1 9 / 27
Introdução
Para efetuar comunicação na rede, você pode 
usar dois tipos de protocolo de transporte
Orientado a conexão ou sem conexão
Baseado em streams ou em pacotes
Confiável ou não confiável (perda, duplicado, 
reordenado, corrompido, etc)
Analogia na telefonia: chamada vs SMS
Em termos de sockets: TCP ou UDP
Protocolo de comunicação (transporte)
Italo Valcy Programação em C, 2013.1 10 / 27
Introdução
Na computação em rede, cada serviço, cada aplicação está 
acessível em determinado IP e em determinada porta
Resumo: Além de conhecer o IP, você deve conhecer a porta
Utilização das portas:
0 – 1023: reservadas (somente o administrador)
1024 – 49151: outras portas reservadas
49152 – 65535: portas dinâmicas
Alguns exemplos (portas padrões):
HTTP (web) => 80 HTTPS (web seguro) => 443
SMTP (e-mails) => 25
Remote Desktop (acesso windows) => 3389
Porta de comunicação
Italo Valcy Programação em C, 2013.1 11 / 27
Introdução
Uma comunicação pode ser denotada como uma 
quíntupla:
IP de origem
Porta de origem
protocolo
IP de destino
Porta de destino
Denotando uma comunicação
Italo Valcy Programação em C, 2013.1 12 / 27
Introdução
Na computação em rede, cada serviço, cada 
aplicação está acessível em determinado IP e 
em determinada porta
Resumo:
Além de conhecer o IP, você deve conhecer a porta
Alguns exemplos (portas padrões):
HTTP (web) => 80 HTTPS (web seguro) => 443
SMTP (e-mails) => 25
Remote Desktop (acesso windows) => 3389
Porta de comunicação
Italo Valcy Programação em C, 2013.1 13 / 27
API de sockets
1. Comprar um telefone
2. Obter um número de telefone
3. Habilitar o recebimento de chamadas (aguardando 
nova chamada) – quantas ao mesmo tempo?
4. Atender o telefone
5. Efetuar chamadas
6. Falar
7. Ouvir
8. Encerrar a chamada
Analogia à telefonia
Italo Valcy Programação em C, 2013.1 14 / 27
API de sockets
1. socket() – cria um novo socket com determinado domínio, tipo, 
protocolo (Comprar um telefone)
2. bind() – associa um nome (IP:porta) ao socket (Obter um número de 
telefone)
3. listen() – especifica a quantidade de conexões simultâneas (habilita 
o recebimento de chamadas / chamadas simultâneas)
4. accept() – servidor aceita uma conexão de um cliente (Atender o 
telefone)
5. connect() – cliente requisita a conexão a um servidor (Efetuar 
chamadas)
6. send(), sendto() – enviar/escrever informações (Falar)
7. recv(), recvfrom() – receber/ler informações (Ouvir)
8. shutdown() – fechar o socket (Encerrar a chamada)
Internet sockets
Italo Valcy Programação em C, 2013.1 15 / 27
Sockets TCP
Italo Valcy Programação em C, 2013.1 16 / 27
Sockets TCP
socket(): cria o socket
listen() – habilita o recebimento de conexões, 
especificando a quantidade de conexões 
simultâneas
accept() – servidor aceita uma conexão de um 
cliente
send() recv() – stream de leitura e escrita (repetido)
shutdown() – encerra a conexão de um cliente
close() – libera a estrutura do kernel
Ações que o servidor executa
Italo Valcy Programação em C, 2013.1 17 / 27
Sockets TCP
socket(): cria o socket
connect() – conecta ao servidor
send(), recv() – stream de leitura e escrita 
(repetido)
shutdown() – encerra a conexão com o servidor
close() – libera a estrutura do kernel
Ações que o cliente executa
Italo Valcy Programação em C, 2013.1 18 / 27
API de socket
Domain: AF_INET
Type: 
SOCK_STREAM (TCP)
SOCK_DGRAM (UDP)
Procolo:
Zero (0) – defini automaticamente o protocolo
Retorno:
Socket ID
Italo Valcy Programação em C, 2013.1 19 / 27
API de socket
sid: socket ID
addrPtr: ponteiro para a estrutura de endereço 
local (internet ou unix sockets)
len: tamanho de *addrPtr
Estrutura de Socket Internet (precisa casting!)
Italo Valcy Programação em C, 2013.1 20 / 27
API de socket
sid: socket ID
size: quantidade de conexões simultâneas
Italo Valcy Programação em C, 2013.1 21 / 27
API de socket
sid: socket ID
addrPtr: ponteiro para a estrutura de endereço 
remoto (internet ou unix sockets)
lenPtr: tamanho de *addrPtr
Estrutura de Socket Internet (precisa casting!)
Italo Valcy Programação em C, 2013.1 22 / 27
API de socket
Estilo de accept():
Servidor interativo: apenas um cliente por vez
Forking server: depois de aceitar, faz um fork()
Servidor concorrente simples: usando select() para 
verificar sockets() em comunicação
Italo Valcy Programação em C, 2013.1 23 / 27
API de socket
Envio de mensagens:
sid: socket ID
Flag: 0 (padrão)
Italo Valcy Programação em C, 2013.1 24 / 27
API de socket
Recebimento de mensagens:
sid: socket ID
Flag: 0 (padrão)
Italo Valcy Programação em C, 2013.1 25 / 27
API de socket
Deve ser o primeiro passo para um cliente
sid: socket ID
addrPtr: ponteiro para a estrutura de endereço 
remoto (internet ou unix sockets)
len: tamanho de *addrPtr
Estrutura de Socket Internet (precisa casting!)
Italo Valcy Programação em C, 2013.1 26 / 27
Exemplo completo
Exemplo completo:
https://disciplinas.dcc.ufba.br/svn/MATA57/2012.2/s
rc/socket/ 
Italo Valcy Programação em C, 2013.1 27 / 27
Exercício
Exer10: Implementar uma aplicação (cliente e 
servidor), onde dois clientes se conectam ao 
servidor para jogar o jogo da velha
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17
	Slide 18
	Slide 19
	Slide 20
	Slide 21
	Slide 22
	Slide 23
	Slide 24
	Slide 25
	Slide 26
	Slide 27

Continue navegando