Académique Documents
Professionnel Documents
Culture Documents
7 de Maio de 2018
Conteúdo
1 Introdução 3
2 Experimento 1 4
2.1 Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Testes e Análise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3 Experimento 2 8
3.1 Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2 Testes e Análise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4 Conclusões 13
2
1 Introdução
Um socket é uma abstração que pode ser entendida como um ponto de comunicação
onde uma aplicação se conecta com a outra aplicação. Ou seja, os sockets abstraem as
camadas de rede e dá às aplicações dos hosts de origem e destino a impressão de que
elas estão diretamente ligadas. Isso é chamado comunicação lógica, ilustrado na figura
1.
Existem dois tipos de sockets: Socket Stream (TCP) ou SOCK DGRAM (UDP). Os
sockets TCP fornecem uma comunicação confiável (garantia da entrega, sem erros, de
pacotes), enquanto os sockets UDP não dão garantia na entrega de pacotes mas, devido
à sua simplicidade, faz com que a entrega dos pacotes seja mais ágil.
3
utilizavam o sistema operacional Ubuntu 16.04 LTS e estavam conectadas por uma rede
Ethernet.
2 Experimento 1
O primeiro experimento consistiu em fazer o exercı́cio 32 do capı́tulo um do livro-texto
[2]. O enunciado é o seguinte:
2.1 Scripts
• Servidor
1 # include < stdio .h >
2 # include < sys / types .h >
3 # include < sys / socket .h >
4 # include < netinet / in .h >
5 # include < netdb .h >
6 # include < stdlib .h >
7 # include < string .h >
8 # include < unistd .h >
9
4
25
48 return 0;
49 }
• Cliente
1 # include < stdio .h >
2 # include < sys / types .h >
3 # include < sys / socket .h >
4 # include < netinet / in .h >
5 # include < netdb .h >
6 # include < stdlib .h >
7 # include < string .h >
8 # include < unistd .h >
9 # include < arpa / inet .h >
10
5
19 int s , new_s ;
20 int len ;
21
22 if ( argc == 2) {
23 host = ( char *) argv [1];
24 } else {
25 fprintf ( stderr , " usage : simplex - talk host \ n " ) ;
26 exit (1) ;
27 }
28
50 return 0;
51 }
O servidor, por meio do comando listen, fica disponı́vel para quando um dos clientes
solicitar a conexão com o comando connect. Antes desses comandos, checa-se se houve
algum erro na criação do soquete ou na sua associação com o endereço.
6
vidor utilizando o comando send. Este, ao receber a informação do cliente por meio do
comando recv, imprime-a na tela.
7
o cliente que estava na fila estabelecia uma conexão com o servidor e transmitia suas
mensagens pendentes. A figura 4 mostra a mensagem enviada pelo host em espera.
3 Experimento 2
A seguir, tem-se o enunciado do exercı́cio 33 do capı́tulo um do livro-texto, atividade a
ser realizada no experimento em questão:
3.1 Scripts
• Servidor
8
1 # include < stdio .h >
2 # include < sys / types .h >
3 # include < sys / socket .h >
4 # include < netinet / in .h >
5 # include < netdb .h >
6 # include < stdlib .h >
7 # include < string .h >
8 # include < unistd .h >
9
9
45 close ( new_s ) ;
46 }
47 return 0;
48 }
• Cliente
1 # include < stdio .h >
2 # include < sys / types .h >
3 # include < sys / socket .h >
4 # include < netinet / in .h >
5 # include < netdb .h >
6 # include < stdlib .h >
7 # include < string .h >
8 # include < unistd .h >
9 # include < arpa / inet .h >
10
22 if ( argc == 2) {
23 host = ( char *) argv [1];
24 } else {
25 fprintf ( stderr , " usage : simplex - talk host \ n " ) ;
26 exit (1) ;
27 }
28
10
41 exit (1) ;
42 }
43
52 return 0;
53 }
11
3.2 Testes e Análise
Nesta nova situação, a principal diferença está na aplicação servidora retransmitir a men-
sagem recebida ao host de origem. Dessa vez, o teste foi realizado com apenas um host se
conectando ao servidor, o que era suficiente para verificar o que foi pedido na questão 33.
12
4 Conclusões
Neste trabalho, foram desenvolvidos códigos para uma aplicação servidora e para aplicações
clientes a fim de solucionar as duas questões propostas: a primeira, onde o servidor re-
cebe mensagens de mais de um cliente; e a segunda na qual, ao receber uma mensagem,
o servidor a retransmite para o cliente.
Com este trabalho foi possı́vel entender, de maneira simplificada, a comunicação por
meio do protocolo de transporte TCP.
Referências
[1] Gustavo Pantuza. O que são e como funcionam os sockets, 2017.
[2] L.L. Peterson and B.S. Davie. Redes de Computadores - Uma abordagem de sistemas.
Campus, 2013.
13