Escolar Documentos
Profissional Documentos
Cultura Documentos
Computadores
Camada de Aplicação
2
Interface Socket
Clientes e servidores UDP
Modelo de implementação
Servidor UDP
socket bind recvfrom sendto close
Comunicação
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
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