Redes de Computadores I - desenvolvimento de

Propaganda
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO
DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS
CURSO DE CIÊNCIA DA COMPUTAÇÃO
Redes de Computadores I
Desenvolvimento de Aplicações de Rede a
partir da Biblioteca de Soquetes Java
Prof. Helcio Wagner da Silva
Introdução
Cliente
Servidor
Soquete
Soquete
TCP
TCP
IP
IP
Host/rede
Host/rede
2
Tipos de Soquetes (TCP)
Soquete
de entrada
Abertura de
conexão
Cliente
Soquete
do cliente
Soquete
de conexão
Servidor
Bytes
Bytes
3
Requisitos das Aplicações-exemplo
1. O Cliente lê uma linha de sua entrada padrão
(teclado) e a envia para o Servidor
2. O Servidor lê a linha a partir de seu soquete de
conexão
3. O Servidor converte a linha para letras maiúsculas
4. O Servidor envia a linha ao Cliente através de seu
soquete de conexão
5. O Cliente lê a linha modificada através de seu
soquete e apresenta a linha na sua saída padrão
(monitor)
4
O Cliente TCP - esquema
Fluxo
de entrada doUsuario
Cliente
Fluxo
de saída
paraOServidor
doServidor
soqueteDoCliente
p/ o Nível
de Transporte
do Nível
de Transporte
Fluxo
de entrada
Soquete
TCP
5
O Cliente TCP - código
import java.io.*;
import java.net.*;
public class ClienteTCP {
public static void main(String[] args) throws Exception {
String sentenca;
String sentencaMod;
BufferedReader doUsuario =
new BufferedReader(new InputStreamReader(System.in));
Socket soqueteDoCliente = new Socket(args[0],6789);
DataOutputStream paraOServidor =
new DataOutputStream(soqueteDoCliente.getOutputStream());
BufferedReader doServidor =
new BufferedReader(new InputStreamReader(
soqueteDoCliente.getInputStream()));
sentenca = doUsuario.readLine();
paraOServidor.writeBytes(sentenca + ‘\n’);
sentencaMod = doServidor.readLine();
System.out.println(“Do servidor: “ + sentencaMod);
soqueteDoCliente.close();
}
}
6
O Servidor TCP - esquema
Núcleo de
Execução do Serviço
Servidor
Fluxo
de entrada
Fluxo
de saída
doCliente
Soquete
TCP
soqueteDeEntrada
do Nível
de Transporte
paraOCliente
soqueteDeConexao
do Nível
de Transporte
p/ o Nível
de Transporte
Soquete
TCP
7
O Servidor TCP - código
import java.io.*;
import java.net.*;
public class ServidorTCP {
public static void main(String[] args) throws Exception {
String sentenca;
String sentencaMod;
ServerSocket soqueteDeEntrada = new ServerSocket(6789);
while (true) {
Socket soqueteDeConexao = soqueteDeEntrada.accept();
BufferedReader doCliente =
new BufferedReader(new InputStreamReader(
soqueteDeConexao.getInputStream()));
DataOutputStream paraOCliente =
new DataOutputStream(soqueteDeConexao.getOutputStream());
sentenca = doCliente.readLine();
sentencaMod = sentenca.toUpperCase() + ‘\n’;
paraOCliente.writeBytes(sentencaMod);
}
}
}
8
Tipos de Soquetes (UDP)
Soquete
do cliente
Cliente
Soquete
do servidor
Bytes
Bytes
Servidor
9
O Cliente UDP - esquema
Fluxo
de entrada doUsuario
Cliente
Estrutura
de dados
pcteDeEnvio
pcteDeRecepcao
soqueteDoCliente
p/ o Nível
de Transporte
do Nível
de Transporte
Estrutura
de dados
Soquete
UDP
10
O Cliente UDP - código
import java.io.*;
import java.net.*;
public class ClienteUDP {
public static void main(String[] args) throws Exception {
String sentenca, sentencaMod;
BufferedReader doUsuario =
new BufferedReader(new InputStreamReader(System.in));
DatagramSocket soqueteDoCliente = new DatagramSocket();
InetAddress endIP = InetAddress.getByName(args[0]);
byte[] dadosDeEnvio = new byte[1024];
byte[] dadosDeRecepcao = new byte[1024];
sentenca = doUsuario .readLine();
dadosDeEnvio = sentenca.getBytes();
DatagramPacket pcteDeEnvio =
new DatagramPacket(dadosDeEnvio,dadosDeEnvio.length,endIP,9876);
soqueteDoCliente.send(pcteDeEnvio);
DatagramPacket pcteDeRecepcao =
new DatagramPacket(dadosDeRecepcao,dadosDeRecepcao.length);
soqueteDoCliente.receive(pcteDeRecepcao);
sentencaMod = new String(pcteDeRecepcao.getData());
System.out.println(“Do servidor: “ + sentencaMod);
soqueteDoCliente.close();
}
}
11
O Servidor UDP - esquema
Núcleo de
Execução do Serviço
Servidor
Estrutura
de dados
pcteDeRecepcao
pcteDeEnvio
soqueteDoServidor
do Nível
de Transporte
p/ o Nível
de Transporte
Estrutura
de dados
Soquete
UDP
12
O Servidor UDP - código
import java.io.*;
import java.net.*;
public class ServidorUDP {
public static void main(String[] args) throws Exception {
String sentencaMod;
DatagramSocket soqueteDoServidor = new DatagramSocket(9876);
byte[] dadosDeRecepcao = new byte[1024];
byte[] dadosDeEnvio = new byte[1024];
while (true) {
DatagramPacket pcteDeRecepcao =
new DatagramPacket(dadosDeRecepcao,dadosDeRecepcao.length);
soqueteDoServidor.receive(pcteDeRecepcao);
sentencaMod = (new String(pcteDeRecepcao.getData())).toUpperCase();
InetAddress endIP = pcteDeRecepcao.getAddress();
int port = pcteDeRecepcao.getPort();
dadosDeEnvio = sentencaMod.getBytes();
DatagramPacket pcteDeEnvio =
new DatagramPacket(dadosDeEnvio,dadosDeEnvio.length,endIP,port);
soqueteDoServidor.send(pcteDeEnvio);
}
}
}
13
Download