Introdu - PowerPoint PPT Presentation

1 / 43
About This Presentation
Title:

Introdu

Description:

Introdu o Programa o com Sockets Fernando Jorge Silveira Filho fernando_at_land.ufrj.br Daniel Sadoc Menasch sadoc_at_land.ufrj.br Vis o Geral Objetivos ... – PowerPoint PPT presentation

Number of Views:92
Avg rating:3.0/5.0
Slides: 44
Provided by: ufr57
Category:
Tags: introdu

less

Transcript and Presenter's Notes

Title: Introdu


1
Introdução à Programação com Sockets
  • Fernando Jorge Silveira Filho
  • fernando_at_land.ufrj.br
  • Daniel Sadoc Menasché
  • sadoc_at_land.ufrj.br

2
Visão Geral
  • Objetivos
  • Realizar comunicação entre processos.
  • Entender como usar as funções da API sockets.
  • Histórico da API sockets desenvolvida na época
    da implementação dos protocolos TCP/IP pelo grupo
    da UC, Berkeley.
  • Inicialmente iremos (re)ver alguns conceitos que
    serão importantes.

3
(No Transcript)
4
Conceitos Importantes
  • Argumentos de Valor/Resultado
  • Descritores de Arquivo
  • Chamadas de Sistema de E/S
  • Byte Ordering
  • Portas e Endereços IP
  • Associações Conexões
  • Serviços de Transporte

5
Argumentos de Valor/Resultado
  • É possível (e comum) na linguagem C, utilizar o
    recurso de passagem de argumentos por referência
    para passar valores para uma função ao mesmo
    tempo em que se espera um valor de retorno na
    mesma variável.
  • Exemplo imagine uma função is_prime() que
    retorna 1 se um número apontado por um ponteiro n
    é primo e 0 (zero) se composto. Neste último
    caso, a função também retorna o número primo mais
    próximo do valor passado. Este segundo valor de
    retorno pode ser colocado no próprio endereço de
    memória referenciado por n.

int is_prime( int n ) / verifica se (n)
é primo e em caso negativo coloca o primo
mais próximo em (n) /
6
(No Transcript)
7
(No Transcript)
8
(No Transcript)
9
(No Transcript)
10
(No Transcript)
11
(No Transcript)
12
Serviços de Transporte
  • A camada de transporte dos protocolos TCP/IP
    fornece duas opções de tipos de serviço
  • Serviço orientado a conexão utiliza o protocolo
    TCP (Transmission Control Protocol) e garante
    entrega e ordenação.
  • Serviço datagrama utiliza o protocolo UDP (User
    Datagram Protocol) e não faz nenhuma garantia.

13
(No Transcript)
14
(No Transcript)
15
(No Transcript)
16
(No Transcript)
17
(No Transcript)
18
(No Transcript)
19
(No Transcript)
20
Sockets TCP
  • Sockets orientados a conexão com garantias de
    entrega e ordenação.
  • É preciso estabelecer a conexão antes da troca de
    dados.
  • O servidor cria um socket especial para escutar
    pedidos de conexão do cliente.
  • Cada vez que o servidor aceita um pedido de
    conexão recebido no socket de escuta, um novo
    socket é criado para realizar a comunicação.
    Assim é possível para o servidor voltar a aceitar
    novos pedidos de conexão mais tarde (usando o
    socket de escuta).

21
(No Transcript)
22
(No Transcript)
23
(No Transcript)
24
(No Transcript)
25
Atenção para uma Armadilha!
  • As funções
  • read, recv, recvfrom, write, send e sendto
  • podem retornar menos bytes do que a quantidade
    requisitada, e nenhuma mensagem de erro é
    retornada neste caso!
  • Solução ao usar as funções recv, recvfrom, send
    e sendto pode-se (deve-se!) passar como parâmetro
    a flag MSG_WAITALL.

26
(No Transcript)
27
(No Transcript)
28
(No Transcript)
29
Servidores Concorrentes
  • Muitas vezes é necessário para um servidor lidar
    com vários clientes de uma única vez. Para
    conseguir isto é preciso, de alguma maneira,
    voltar a aceitar conexões, sem esperar que um
    cliente seja completamente servido.
  • Isto normalmente é feito através da criação de
    novas threads ou novos processos.
  • Um servidor, após o retorno da função accept(),
    se divide em dois, e enquanto uma linha de
    execução se dedica a atender o cliente, outra
    volta a esperar por novos pedidos de conexão.

30
Servidores concorrentesEsquema de um Servidor
Típico
for( ) connfd accept(listenfd, ...)
if ( ( pid fork() ) 0 ) close(listenfd)
doit(connfd) close(connfd) exit(0)
close (connfd)
  • pid_t pid
  • int listenfd, confd
  • listenfd socket(...)
  • bind(listenfd, ...)
  • listen(listenfd, LISTENQ)

31
(No Transcript)
32
Sockets UDP
  • Sockets sem conexão e sem garantias de entrega ou
    ordenação.
  • Só é preciso saber o endereço de destino antes de
    enviar dados. É possível receber dados a qualquer
    momento e de qualquer um. Usamos as funções
    sendto() e recvfrom().
  • Pode-se ainda usar a função connect() com sockets
    UDP, mas o seu significado aqui é diferente, uma
    vez que NÃO faz sentido falar em uma conexão UDP.
    Para sockets UDP, a função connect() apenas
    fixa o endereço conectado. Assim é possível
    usar as funções send() e recv() como para sockets
    TCP.

33
(No Transcript)
34
(No Transcript)
35
(No Transcript)
36
(No Transcript)
37
(No Transcript)
38
Depurando Passo 0,Exibindo mensagens de aviso
  • Esta é a forma mais simples de depurar aplicações
    que envolvem sockets, threads e mais de um
    processo.
  • Atenção! Deve-se gerar as mensagens de aviso em
    stderr (que não possui buffer) e não stdout!
  • Inconveniente desta técnica de depuração pode
    afetar o funcionamento do programa.

39
Depurando Passo 1,A Máquina de Estados
Comando chave netstat -a
40
Depurando Passo 1, A Máquina de Estados do TCP
Comando chave netstat -a
sadoc_at_copa src netstat -a grep 32568 Proto
Local Address Foreign Address State tcp
32568 LISTEN tcp
localhost47415 localhost32568 ESTABLISHED tcp
localhost32568 localhost47415 ESTABLISHED
sadoc_at_copa src netstat -a grep 32568 tcp
localhost47415 localhost32568 CLOSE_WAIT tcp
localhost32568 localhost47415 FIN_WAIT2
wildcard
41
Depurando Passo 2,O comando tcpdump
  • tcpdump -x src host_name gt log_file
  • Programa equivalente, com interface gráfica
    ethereal

Fonte dos pacotes
Imprime o conteúdo de cada pacote,em hexadecimal
42
Lições Aprendidas
43
Bibliografia Recomendada
  • Stevens, W. R. UNIX Network Programming Volume
    I Networking APIs Sockets and XTI
  • Stevens, W.R. TCP/IP Illustrated vol.1
  • Besaw, L. BSD Sockets Reference (formato
    PostScript (.ps) em www.land.ufrj.br/classes/tp/i
    ndex-103.html).
Write a Comment
User Comments (0)
About PowerShow.com