Você está na página 1de 11

Curso Superior em Redes de

Computadores
Camada de Aplicação

Prof. Sales Filho <salesfilho@cefetrn.br>


Objetivo
 Apresentar uma implementação cliente-
servidor
 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 accept read write close

Sincronização Comunicação

socket connect 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
 Cliente e Servidor UDP
 Cliente e Servidor TCP
 Analise com o WireShark
 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

Você também pode gostar