Slide 1 - Unisinos

Propaganda
Redes de
Computadores I
Prof. Mateus Raeder
Universidade do Vale do Rio dos Sinos
- São Leopoldo -
Programação com sockets
• Meta: aprender construir aplicação
cliente/servidor que se comunica usando
Uma interface (uma
sockets.
“porta”),
local ao hospedeiro,
criada
por e pertencente à
aplicação,
e controlado pelo SO,
através
da qual um processo de
aplicação pode tanto
enviar
como receber mensagens
de/para outro processo
de
aplicação
(remoto ou local)
Redes de Computadores I – Prof. Mateus Raeder
Programação com sockets usando TCP
• Socket: uma porta entre o processo de aplicação
e um protocolo de transporte fim-a-fim (UDP ou
TCP)
• Serviço TCP: transferência confiável de bytes de um
processo para outro
controlled by
application
developer
controlled by
operating
system
process
process
socket
TCP with
buffers,
variables
socket
TCP with
buffers,
variables
host or
server
internet
controlled by
application
developer
controlled by
operating
system
host or
server
Redes de Computadores I – Prof. Mateus Raeder
Programação com sockets usando TCP
Cliente deve contactar o
servidor:
– processo servidor já deve estar
executando antes de ser
contactado
– servidor deve ter criado socket
(porta) que aceita o contato
do cliente
Cliente contata o servidor:
– criando um socket TCP
– especificando endereço IP e
número da porta do processo
servidor
Quando o cliente cria o socket:
cliente TCP estabelece
conexão com o TCP do
servidor
TCP fornece a
transferência
confiável,
entre o cliente e o
servidor
ponto de vista da
aplicação
Redes de Computadores I – Prof. Mateus Raeder
Programação com sockets usando TCP
doUsuario
doServidor
• Input strem: sequencia
de bytes para dentro
do processo
• Output stream:
sequencia de bytes
para fora do processo
ParaServid
or
Exemplo de aplicação clienteservidor:
• Cliente lê linha da entrada
padrão (fluxo doUsuário),
envia para servidor via socket
(fluxo paraServidor).
• Servidor converte linha para
letra maiúscula, e devolve
para o cliente.
• Cliente lê linha modificada do
socket (fluxo doServidor),
imprime-a
Socket do cliente
Redes de Computadores I – Prof. Mateus Raeder
Interações cliente/servidor com socket: TCP
Redes de Computadores I – Prof. Mateus Raeder
Exemplo: cliente Java TCP (1)
Contém classe para
streams de I/O
Cria
fluxo de entrada
Cria
socket de cliente,
conexão ao servidor
Contém classes para
import java.io.*;
suporte a rede
import java.net.*;
class ClienteTCP {
public static void main(String argv[]) throws Exception
{
String frase;
String fraseModificada;
BufferedReader doUsuario =
new BufferedReader(new InputStreamReader(System.in));
Socket socketCliente = new Socket(”idHosp", 6789);
DataOutputStream paraServidor =
new DataOutputStream(socketCliente.getOutputStream());
Cria
fluxo de saída
anexado ao socket
Redes de Computadores I – Prof. Mateus Raeder
Exemplo: cliente Java TCP (2)
Cria
fluxo de entrada
ligado ao socket
Envia linha
ao servidor
Lê linha
do servidor
BufferedReader doServidor =
new BufferedReader(new
InputStreamReader(socketCliente.getInputStream()));
frase = doUsuario.readLine();
paraServidor.writeBytes(frase + '\n');
fraseModificada = doServidor.readLine();
System.out.println(”Do Servidor: " + fraseModificada);
socketCliente.close();
}
}
Redes de Computadores I – Prof. Mateus Raeder
Exemplo: servidor Java TCP (1)
Cria socket
para recepção
na porta 6789
Aguarda, no socket
para recepção, o
contato do cliente
import java.io.*;
import java.net.*;
class servidorTCP {
public static void main(String argv[]) throws Exception
{
String fraseCliente;
String fFraseMaiusculas;
ServerSocket socketRecepcao = new ServerSocket(6789);
while(true) {
Socket socketConexao = socketRecepcao.accept();
BufferedReader doCliente =
new BufferedReader(new
InputStreamReader(socketConexao.getInputStream()));
Cria fluxo de
entrada, ligado
ao socket
Redes de Computadores I – Prof. Mateus Raeder
Exemplo: servidor Java TCP (2)
Cria fluxo
de saída, ligado
ao socket
Lê linha
do socket
Escreve linha
para o socket
DataOutputStream paraCliente =
new
DataOutputStream(socketConexão.getO
utputStream());
fraseCliente= doCliente.readLine();
fraseEmMaiusculas=
fraseCliente.toUpperCase() + '\n';
paraClient.writeBytes(fraseEmMaiuscul
as);
}
}
}
Final do laço while.
Volta ao início e aguarda
conexão de outro cliente
Redes de Computadores I – Prof. Mateus Raeder
Download