Slide 1 - diatinf

Propaganda
Curso Superior em Redes de
Computadores
Camada de Aplicação
Prof. Sales Filho <[email protected]>
Objetivo

Apresentar uma implementação clienteservidor
 Socket
UDP
 Socket TCP

Realizar captura de pacotes das
implementações apresentadas
2
Interface Socket

Clientes e servidores UDP
 Modelo
de implementação
Servidor UDP
socket
bind
recvfrom
sendto
close
Comunicação
socket
sendto
recvfrom
close
Cliente UDP
3
Implementação :: Servidor
UDP
import java.io.*;
import java.net.*;
class UDPServer {
public static void main(String args[]) throws Exception {
// cria socket do servidor com a porta 9876
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true) {
// declara o pacote a ser recebido
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
// recebe o pacote do cliente
serverSocket.receive(receivePacket);
// pega os dados, o endereço IP e a porta do cliente para poder mandar a msg de volta
String sentence = new String( receivePacket.getData());
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
// transforma em maiúsculas
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
// monta o pacote com enderço IP e porta
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
// envia ao cliente
serverSocket.send(sendPacket);
}
}
}
4
Implementação :: Cliente UDP
import java.io.*; // classes para input e output streams e
import java.net.*;// DatagramaSocket,InetAddress,DatagramaPacket
class UDPClient {
public static void main(String args[]) throws Exception {
// cria o stream do teclado
BufferedReader inFromUser = new BufferedReader(new InputStreamReader (System.in));
DatagramSocket clientSocket = new DatagramSocket(); // declara socket cliente
// obtem endereço IP do servidor com o DNS
InetAddress IPAddress = InetAddress.getByName("hostname");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine(); // lê uma linha do teclado
sendData = sentence.getBytes();
// cria pacote com o dado, o endereço do server e porta do servidor
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket); //envia o pacote
// declara o pacote a ser recebido
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket); // recebe pacote do servidor
// separa somente o dado recebido
String modifiedSentence = new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence); // mostra no vídeo
clientSocket.close(); // fecha o cliente
}
}
5
Interface Socket

Clientes e servidores TCP
 Modelo
de implementação
Servidor TCP
socket
bind
Listen
Sincronização
socket
connect
accept
read
write
close
Comunicação
write
read
close
Cleinte TCP
6
Projeto de servidores

Tratamento de requisições

Servidor Iterativo


Adequado para serviços com reduzida taxa de requisição
Requisições com baixa carga de processamento
Servidor TCP
socket
bind
Listen
accept
read
write
close
Socket original
Novo socket
7
Implementação :: Servidor
import java.io.*;
import java.net.*;
class TCPServer {
public static void main(String argv[]) throws Exception {
String clientSentence;
String capitalizedSentence;
// cria socket de comunicação com os clientes na porta 6789 (bind)
ServerSocket welcomeSocket = new ServerSocket(6789);
// espera msg de algum cliente e trata
while(true) {
// espera conexão de algum cliente
Socket connectionSocket = welcomeSocket.accept();
// cria streams de entrada e saida com o cliente que chegou
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(
connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(
connectionSocket.getOutputStream());
// lê uma linha do cliente
clientSentence = inFromClient.readLine();
// transforma a linha em maiúsculas
capitalizedSentence = clientSentence.toUpperCase() + '\n';
// envia a linha maiúscula para o cliente
outToClient.writeBytes(capitalizedSentence);
}
}
8
Implementação :: Cliente
import java.io.*; // classes para input e output streams
import java.net.*; // classes para socket, serversocket e clientsocket
class TCPClient {
public static void main(String argv[]) throws Exception {
String sentence;
String modifiedSentence;
// cria o stream do teclado
BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
// cria o socket de acesso ao server hostname na porta 6789
Socket clientSocket = new Socket("hostname", 6789);
// cria os streams (encadeamentos) de entrada e saida com o servidor
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new inputStreamReader(
clientSocket.getInputStream()));
// le uma linha do teclado e coloca em sentence
sentence = inFromUser.readLine();
// envia a linha para o server
outToServer.writeBytes(sentence + '\n');
// lê uma linha do server
modifiedSentence = inFromServer.readLine();
// apresenta a linha do server no vídeo
System.out.println("FROM SERVER " + modifiedSentence);
// fecha o cliente
clientSocket.close();
}
}
9
Atividade

Compile e execute



Analise com o WireShark


Cliente e Servidor UDP
Cliente e Servidor TCP
Clientes e servidores UDP/TCP
Realize teste de bind em portas reservadas com
processos de usuário
10
Referências



Comer, Douglas E., Interligação de Redes Com Tcp/ip
James F. Kurose, Redes de Computadores e a
Internet
Escola Superior de Redes, Arquitetura e Protocolos de
Redes TCP/IP
11
Download