0% acharam este documento útil (0 voto)
2 visualizações21 páginas

Programação com Sockets em Redes

O documento aborda a programação com sockets, focando na construção de aplicações cliente/servidor que se comunicam via TCP e UDP. Ele explica os conceitos de sockets, a diferença entre os serviços de transporte, e fornece exemplos práticos de implementação em Java. Além disso, inclui referências bibliográficas para leitura adicional sobre redes de computadores.

Enviado por

raffael
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
2 visualizações21 páginas

Programação com Sockets em Redes

O documento aborda a programação com sockets, focando na construção de aplicações cliente/servidor que se comunicam via TCP e UDP. Ele explica os conceitos de sockets, a diferença entre os serviços de transporte, e fornece exemplos práticos de implementação em Java. Além disso, inclui referências bibliográficas para leitura adicional sobre redes de computadores.

Enviado por

raffael
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

REDES DE

COMPUTADORES
Camada de Aplicação – Sockets
Prof. Bruno Guazzelli Batista
brunoguazzelli@[Link]
Créditos

Os slides integrantes deste material foram atualizados a


partir das notas de aulas dos professores:

Prof. Luciana A. F. Martimiano (UEM)


Prof. Kalinka R. L. J. C. Branco (ICMC-USP)
Prof. Julio Cesar Estrella (ICMC-USP)

Redes de Computadores e a Internet


Kurose e Ross - Editora Pearson

2
PROGRAMAÇÃO
COM SOCKETS

3
Programação com Sockets
Meta: aprender a construir aplicações cliente/servidor que
se comunicam usando sockets
socket
API Sockets
• apareceu no BSD4.1 UNIX uma interface (uma
em 1981 “porta”), local ao host,
• são explicitamente criados, criada por ele pertencente
usados e liberados por à aplicação, controlado
aplicações pelo SO, através da qual
• paradigma cliente/servidor um processo de
• dois tipos de serviço de aplicação pode tanto
transporte via API Sockets enviar como receber
– datagrama não confiável mensagens para/de outro
– fluxo de bytes, confiável processo de aplicação
(remoto ou local)

4
Programação com Sockets usando TCP
Socket: uma porta entre o processo de aplicação e um
protocolo de transporte fim-a-fim
Serviço TCP: transferência confiável de bytes de um
processo para outro

controlado pelo
controlado pelo processo programador de
programador de processo
aplicação
aplicação socket socket
TCP com TCP com controlado
controlado
buffers, pelo sistema
pelo sistema buffers, internet variáveis operacional
operacional variáveis

estação ou estação ou
servidor servidor
5
Programação com Sockets usando
TCP
Cliente deve contactar servidor • Quando cliente cria socket: TCP do
• processo servidor deve antes cliente estabelece conexão com
estar em execução TCP do servidor
• servidor deve antes ter criado • Quando contatado pelo cliente, o
socket (porta) que aguarda TCP do servidor cria socket novo
contato do cliente para que o processo servidor possa
se comunicar com o cliente
Cliente contacta servidor para:
– permite que o servidor converse
• criar socket TCP local ao com múltiplos clientes
cliente
• especificar endereço IP, ponto de vista da aplicação
número de porta do processo TCP provê transferência
servidor confiável, ordenada de bytes
(“tubo”) entre cliente e servidor

6
Comunicação entre Sockets

7
Exemplo de Aplicação Cliente-Servidor
Fluxo de entrada: sequência de
1. cliente lê linha da entrada bytes recebida pelo
padrão (fluxo doUsuário), processo
envia para servidor via socket
Fluxo de saída: sequência de
(fluxo paraServidor)
bytes transmitida pelo
2. servidor lê linha do socket processo
3. servidor converte linha para
letras maiúsculas, devolve
para o cliente Objetivo: servidor
4. cliente lê linha modificada do
converte todas as letras
socket (fluxo doServidor), e digitadas pelo cliente
a imprime para maiúsculas
(mostra no monitor)

8
Interações
cliente/servidor
usando o TCP

9
Exemplo: Cliente Java (TCP)
Contém classes
import [Link].*; para Streams IO
import [Link].*;
class ClienteTCP { Contém classes para
suporte à rede
public static void main(String argv[]) throws Exception
{
String frase;
String fraseModificada;
Cria fluxo de
entrada BufferedReader doUsuario =
padrão new BufferedReader(new InputStreamReader([Link]));
Cria socket de
cliente, conexão Socket socketCliente = new Socket(”hostname", 6789);
ao servidor

Cria fluxo de DataOutputStream paraServidor =


saída ligado new DataOutputStream([Link]());
ao socket
10
Exemplo: Cliente Java (TCP),
cont.
Cria BufferedReader doServidor =
fluxo de entrada new BufferedReader(new
ligado ao socket InputStreamReader([Link]()));

frase = [Link]();
Envia linha
ao servidor [Link](frase + '\n');

Lê linha fraseModificada = [Link]();


do servidor
[Link](”Do Servidor: " + fraseModificada);

[Link]();

}
}
11
Exemplo: Servidor Java (TCP)
import [Link].*; Contém classes
import [Link].*; para Streams IO
Contém classes para
class servidorTCP {
suporte à rede
public static void main(String argv[]) throws Exception
{
String fraseCliente;
Cria socket String fraseMaiusculas;
para recepção
ServerSocket socketRecepcao = new ServerSocket(6789);
na porta 6789
while(true) {
Aguarda, no socket
de recepção, o Socket socketConexao = [Link]();
contato do cliente
BufferedReader doCliente =
Cria fluxo de new BufferedReader(new
entrada, ligado InputStreamReader([Link]()));
ao socket
12
Exemplo: Servidor Java (TCP), cont

Cria fluxo
de saída, ligado DataOutputStream paraCliente =
ao socket new DataOutputStream(socketConexã[Link]());
Lê linha
do socket fraseCliente= [Link]();

fraseEmMaiusculas= [Link]() + '\n';


Escreve linha
[Link](fraseEmMaiusculas);
ao socket
}
}
} Final do laço while,
volta ao início e aguarda
conexão de outro cliente

13
Programação com Sockets usando UDP

UDP: não tem “conexão” entre


cliente e servidor ponto de vista da aplicação
• não tem “handshaking” UDP provê transferência
não confiável de grupos
• remetente coloca
de bytes (“datagramas”)
explicitamente endereço IP e
entre cliente e servidor
porta do destino
• servidor deve extrair endereço
IP, porta do remetente do Objetivo: servidor converte todas
datagrama recebido as letras digitadas pelo cliente para
UDP: dados transmitidos podem maiúsculas (mostra no monitor)
ser recebidos fora de ordem,
ou perdidos

14
Interações Cliente/Servidor usando o UDP
Servidor (executa em hostid) Cliente

cria socket,
porta=x, para cria socket,
socketCliente =
pedido que chega: DatagramSocket()
socketServidor =
DatagramSocket()
cria endereço (hostid, porta=x)
envia pedido em datagrama
usando socketCliente
lê pedido do
socketServidor

escreve resposta
ao socketServidor
especificando endereço lê resposta do
IP e o número de porta socketCliente
do cliente
fecha
socketCliente

15
Exemplo: Cliente Java (UDP)
import [Link].*;
import [Link].*;

class clienteUDP {
public static void main(String args[]) throws Exception
{
Cria
fluxo de entrada BufferedReader do Usuario=
new BufferedReader(new InputStreamReader([Link]));
Cria
socket de cliente DatagramSocket socketCliente = new DatagramSocket();
Traduz nome de
InetAddress IPAddress = [Link](”nomeHosp");
hospedeiro ao
endereço IP byte[] sendData = new byte[1024];
usando DNS byte[] receiveData = new byte[1024];

String frase = [Link]();


sendData = [Link]();

16
Exemplo: Cliente Java (UDP) cont.
Cria datagrama
com dados para
DatagramPacket pacoteEnviado =
enviar,
new DatagramPacket(dadosEnvio, [Link],
comprimento, IPAddress, 9876);
endereço IP, porta
Envia datagrama [Link](pacoteEnviado);
ao servidor
DatagramPacket pacoteRecebido =
new DatagramPacket(dadosRecebidos, [Link]);
Lê datagrama
do servidor [Link](pacoteRecebido);

String fraseModificada =
new String([Link]());

[Link](”Do Servidor:" + fraseModificada);


[Link]();
}
}

17
Exemplo: Servidor Java (UDP)
import [Link].*;
import [Link].*;

class servidorUDP {
public static void main(String args[]) throws Exception
Cria socket {
para datagramas
DatagramSocket socketServidor = new DatagramSocket(9876);
na porta 9876
byte[] dadosRecebidos = new byte[1024];
byte[] dadosEnviados = new byte[1024];

while(true)
{
Aloca memória para DatagramPacket pacoteRecebido =
new DatagramPacket(dadosRecebidos,
receber datagrama
[Link]);
Recebe [Link](pacoteRecebido);
datagrama
18
Exemplo: Servidor Java (UDP), cont
String frase = new String([Link]());
Obtém
endereço IP, no. InetAddress IPAddress = [Link]();
de porta do
remetente int porta = [Link]();

String fraseEmMaiusculas = [Link]();

dadosEnviados = [Link]();
Cria datagrama p/
DatagramPacket pacoteEnviado =
enviar ao cliente new DatagramPacket(dadosEnviados,
[Link], IPAddress, porta);
Escreve
datagrama [Link](pacoteEnviado);
para o socket }
}
} Fim do laço while,
volta ao início e aguarda
chegar outro datagrama
19
Leitura Recomendada
• Tanenbaum, Redes de Computadores, 4ª
ed., 2003
– Capítulo 07
• Kurose & Ross, Redes de Computadores e
a Internet, 3ª ed., 2006
– Capítulo 02

20
Dúvidas

21

Você também pode gostar