Java network-sockets-etc

85
http://publicationslist.org/junio Rede Prof. Jose Fernando Rodrigues Junior http://www.icmc.usp.br/~junio [email protected] INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO - USP SCC0504 - Programação Orientada a Objetos

Transcript of Java network-sockets-etc

Page 1: Java network-sockets-etc

http://publicationslist.org/junio

RedeProf. Jose Fernando Rodrigues Juniorhttp://www.icmc.usp.br/~junio

[email protected]

INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO - USP

SCC0504 - Programação Orientada a Objetos

Page 2: Java network-sockets-etc

http://publicationslist.org/junio

Rede – conceitos básicos• A comunicação entre computadores é denominada comunicação via

rede de computadores

• Para que esta comunicação ocorra, os computadores participantes darede precisam seguir um protocolo

• Um protocolo é uma sequência de passos necessária para que os doiscomputadores saibam:• quando uma conexão começa e quando termina• quando uma transmissão começa e quando termina• quando ocorre uma falha, e como se recuperar da falha• entre outras funcionalidades necessárias

Page 3: Java network-sockets-etc

http://publicationslist.org/junio

Rede – conceitos básicos - TCP• O protocolo mais usado é o Transmission Control Protocol (TCP)

• O TCP provê a transmissão segura (garantia de entrega),ordenada, com verificação de erro, de um stream de bytes entredois programas de computador, cada um em um computador diferente

• O protocolo Internet Protocol (IP) funciona de maneiracomplementar ao TCP (e a outros protocolos) oferecendofuncionalidades de roteamento entre computadores

• Segundo o IP, um computador é identificado por um número IP

• Em cada computador, processos são identificados por númerosde portas

Page 4: Java network-sockets-etc

http://publicationslist.org/junio

Sockets• Socket: trata-se de um conceito presente em diversas plataformas de

programação, o qual abstrai o uso do protocolo TCP para acomunicação entre computadores

• Definição: uma socket é ponto terminal (endpoint = IP:port) de umaconexão bi-direcional entre dois programas que usam a rede para secomunicar.

• Uma socket é atrelada a um número de porta, de maneira que oprotocolo TCP possa identificar a aplicação para a qual os dados sãodestinados

Page 5: Java network-sockets-etc

http://publicationslist.org/junio

SocketsO pacote java.net provê duas classes que possibilitam o uso de sockets:

• ServerSocket: usado para receber conexões• Socket: usado para fazer conexões

• Basicamente o uso destas classes ocorre na seguinte ordem:1. Abertura da Socket2. Abertura de streams de leitura e escrita na Socket3. Escrita e leitura de dados nas/das streams4. Fechamento dos streams5. Fechamento da socket

• O Java abstrai as funcionalidades de rede usando implementaçõesespecíficas de cada plataforma (Windows, Mac, Linux, ...)

Page 6: Java network-sockets-etc

http://publicationslist.org/junio

Servidor TCP simples

Page 7: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que repete o que o cliente envia:

Servidor

SERVIDOR

Page 8: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que repete o que o cliente envia:

ServerSocket OUVIDO = new ServerSocket(8008);

Servidor

ServerSocketOUVIDO

SERVIDOR

Page 9: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que repete o que o cliente envia:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

Servidor

ServerSocketOUVIDO

OUVIDO.accept( )

SERVIDOR

Page 10: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que repete o que o cliente envia:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

Servidor

ServerSocketOUVIDO

OUVIDO.accept( )

SERVIDOR CLIENTE

Socket

Page 11: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que repete o que o cliente envia:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

SERVIDOR_SOCKET.getInputStream()));

Servidor

ServerSocketOUVIDO

RECEBE

SERVIDOR CLIENTE

ENVIA

Page 12: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que repete o que o cliente envia:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

SERVIDOR_SOCKET.getInputStream()));PrintWriter ENVIA = new PrintWriter(

new OutputStreamWriter(SERVIDOR_SOCKET.getOutputStream()));

Servidor

ServerSocketOUVIDO

RECEBE

SERVIDOR CLIENTE

RECEBE

ENVIA

ENVIA

Page 13: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que repete o que o cliente envia:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

SERVIDOR_SOCKET.getInputStream()));PrintWriter ENVIA = new PrintWriter(

new OutputStreamWriter(SERVIDOR_SOCKET.getOutputStream()));

String str = "";while(str.compareTo("BYE") != 0){str = RECEBE.readLine();

ENVIA.println("O servidor repete: \"" + str + "\"");ENVIA.flush();

}

Servidor

ServerSocketOUVIDO

RECEBE

SERVIDOR

ENVIA

CLIENTE

RECEBE

ENVIA

Page 14: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que repete o que o cliente envia:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

SERVIDOR_SOCKET.getInputStream()));PrintWriter ENVIA = new PrintWriter(

new OutputStreamWriter(SERVIDOR_SOCKET.getOutputStream()));

String str = "";while(str.compareTo("BYE") != 0){str = RECEBE.readLine();

ENVIA.println("O servidor repete: \"" + str + "\"");ENVIA.flush();

}

Servidor

ServerSocketOUVIDO

RECEBE

SERVIDOR

ENVIA

CLIENTE

RECEBE

ENVIA

Page 15: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que repete o que o cliente envia:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

SERVIDOR_SOCKET.getInputStream()));PrintWriter ENVIA = new PrintWriter(

new OutputStreamWriter(SERVIDOR_SOCKET.getOutputStream()));

String str = "";while(str.compareTo("BYE") != 0){str = RECEBE.readLine();

ENVIA.println("O servidor repete: \"" + str + "\"");ENVIA.flush();

}

RECEBE.close();

Servidor

ServerSocketOUVIDO

SERVIDOR

ENVIA

CLIENTE

RECEBE

Page 16: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que repete o que o cliente envia:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

SERVIDOR_SOCKET.getInputStream()));PrintWriter ENVIA = new PrintWriter(

new OutputStreamWriter(SERVIDOR_SOCKET.getOutputStream()));

String str = "";while(str.compareTo("BYE") != 0){str = RECEBE.readLine();

ENVIA.println("O servidor repete: \"" + str + "\"");ENVIA.flush();

}

RECEBE.close();ENVIA.close();

Servidor

ServerSocketOUVIDO

SERVIDOR CLIENTE

Page 17: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que repete o que o cliente envia:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

SERVIDOR_SOCKET.getInputStream()));PrintWriter ENVIA = new PrintWriter(

new OutputStreamWriter(SERVIDOR_SOCKET.getOutputStream()));

String str = "";while(str.compareTo("BYE") != 0){str = RECEBE.readLine();

ENVIA.println("O servidor repete: \"" + str + "\"");ENVIA.flush();

}

RECEBE.close();ENVIA.close();SERVIDOR_SOCKET.close();OUVIDO.close();

Servidor

SERVIDOR CLIENTE

Page 18: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que repete o que o cliente envia:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

SERVIDOR_SOCKET.getInputStream()));PrintWriter ENVIA = new PrintWriter(

new OutputStreamWriter(SERVIDOR_SOCKET.getOutputStream()));

String str = "";while(str.compareTo("BYE") != 0){str = RECEBE.readLine();

ENVIA.println("O servidor repete: \"" + str + "\"");ENVIA.flush();

}

RECEBE.close();ENVIA.close();SERVIDOR_SOCKET.close();OUVIDO.close();

Servidor

SERVIDOR CLIENTE

Perceba que existe um protocolo entre o servidor e o cliente:

• no servidor: receber, e em seguida enviar• no cliente: enviar, e em seguida receber

Protocolos são necessários em comunicação entrecomputadores, pois eles definem o quê e quando as coisas irãoacontecer.

Em todos os próximos exemplos, sempre haverá umprotocolo, por mais simples que seja.

Page 19: Java network-sockets-etc

http://publicationslist.org/junio

Cliente TCP simples

Page 20: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia texto ao servidor:

ServerSocketOUVIDO

OUVIDO.accept( )

SERVIDOR CLIENTE

Cliente

Page 21: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia texto ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

Cliente

ServerSocketOUVIDO

OUVIDO.accept( )

SERVIDOR CLIENTE

Socket

Page 22: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia texto ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ENVIA = new PrintWriter(CLIENTE_SOCKET.getOutputStream(), true);

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTESocket

RECEBE ENVIA

Page 23: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia texto ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ENVIA = new PrintWriter(CLIENTE_SOCKET.getOutputStream(), true);

RECEBE = new BufferedReader(new InputStreamReader(

CLIENTE_SOCKET.getInputStream()));

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTESocket

RECEBE

ENVIA RECEBE

ENVIA

Page 24: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia texto ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ENVIA = new PrintWriter(CLIENTE_SOCKET.getOutputStream(), true);

RECEBE = new BufferedReader(new InputStreamReader(

CLIENTE_SOCKET.getInputStream()));

BufferedReader LEITOR_ENTRADA_PADRAO = new BufferedReader(new InputStreamReader(System.in));

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTESocket

RECEBE

ENVIA RECEBE

ENVIA

Page 25: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia texto ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ENVIA = new PrintWriter(CLIENTE_SOCKET.getOutputStream(), true);

RECEBE = new BufferedReader(new InputStreamReader(

CLIENTE_SOCKET.getInputStream()));

BufferedReader LEITOR_ENTRADA_PADRAO = new BufferedReader(new InputStreamReader(System.in));

String userInput = "";while(userInput.compareTo(“BYE") != 0){userInput = LEITOR_ENTRADA_PADRAO.readLine();ENVIA.println(userInput);System.out.println(RECEBE.readLine());

}

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTESocket

RECEBE

ENVIA RECEBE

ENVIA

Page 26: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia texto ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ENVIA = new PrintWriter(CLIENTE_SOCKET.getOutputStream(), true);

RECEBE = new BufferedReader(new InputStreamReader(

CLIENTE_SOCKET.getInputStream()));

BufferedReader LEITOR_ENTRADA_PADRAO = new BufferedReader(new InputStreamReader(System.in));

String userInput = "";while(userInput.compareTo(“BYE") != 0){userInput = LEITOR_ENTRADA_PADRAO.readLine();ENVIA.println(userInput);System.out.println(RECEBE.readLine());

}

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTESocket

RECEBE

ENVIA RECEBE

ENVIA

Page 27: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia texto ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ENVIA = new PrintWriter(CLIENTE_SOCKET.getOutputStream(), true);

RECEBE = new BufferedReader(new InputStreamReader(

CLIENTE_SOCKET.getInputStream()));

BufferedReader LEITOR_ENTRADA_PADRAO = new BufferedReader(new InputStreamReader(System.in));

String userInput = "";while(userInput.compareTo(“BYE") != 0){userInput = LEITOR_ENTRADA_PADRAO.readLine();ENVIA.println(userInput);System.out.println(RECEBE.readLine());

}

ENVIA.close();

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTESocket

ENVIA RECEBE

Page 28: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia texto ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ENVIA = new PrintWriter(CLIENTE_SOCKET.getOutputStream(), true);

RECEBE = new BufferedReader(new InputStreamReader(

CLIENTE_SOCKET.getInputStream()));

BufferedReader LEITOR_ENTRADA_PADRAO = new BufferedReader(new InputStreamReader(System.in));

String userInput = "";while(userInput.compareTo(“BYE") != 0){userInput = LEITOR_ENTRADA_PADRAO.readLine();ENVIA.println(userInput);System.out.println(RECEBE.readLine());

}

ENVIA.close();RECEBE.close();

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTESocket

Page 29: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia texto ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ENVIA = new PrintWriter(CLIENTE_SOCKET.getOutputStream(), true);

RECEBE = new BufferedReader(new InputStreamReader(

CLIENTE_SOCKET.getInputStream()));

BufferedReader LEITOR_ENTRADA_PADRAO = new BufferedReader(new InputStreamReader(System.in));

String userInput = "";while(userInput.compareTo(“BYE") != 0){userInput = LEITOR_ENTRADA_PADRAO.readLine();ENVIA.println(userInput);System.out.println(RECEBE.readLine());

}

ENVIA.close();RECEBE.close();LEITOR_ENTRADA_PADRAO.close();

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTESocket

Page 30: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia texto ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ENVIA = new PrintWriter(CLIENTE_SOCKET.getOutputStream(), true);

RECEBE = new BufferedReader(new InputStreamReader(

CLIENTE_SOCKET.getInputStream()));

BufferedReader LEITOR_ENTRADA_PADRAO = new BufferedReader(new InputStreamReader(System.in));

String userInput = "";while(userInput.compareTo(“BYE") != 0){userInput = LEITOR_ENTRADA_PADRAO.readLine();ENVIA.println(userInput);System.out.println(RECEBE.readLine());

}

ENVIA.close();RECEBE.close();LEITOR_ENTRADA_PADRAO.close();CLIENTE_SOCKET.close();

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTE

Page 31: Java network-sockets-etc

http://publicationslist.org/junio

Servidor TCP simples para múltiplos clientes usando Threads

Page 32: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que repete o que o cliente envia:

ServerSocket OUVIDO = new ServerSocket(8008);

Socket SERVIDOR_SOCKET = OUVIDO.accept();

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

SERVIDOR_SOCKET.getInputStream()));PrintWriter ENVIA = new PrintWriter(

new OutputStreamWriter(SERVIDOR_SOCKET.getOutputStream()));

String str = "";while(str.compareTo("BYE") != 0){str = RECEBE.readLine();

ENVIA.println("O servidor repete: \"" + str + "\"");ENVIA.flush();

}

RECEBE.close();ENVIA.close();SERVIDOR_SOCKET.close();OUVIDO.close();

Servidor com Threads

Page 33: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que repete o que o cliente envia:

ServerSocket OUVIDO = new ServerSocket(8008);

Socket SERVIDOR_SOCKET = OUVIDO.accept();

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

SERVIDOR_SOCKET.getInputStream()));PrintWriter ENVIA = new PrintWriter(

new OutputStreamWriter(SERVIDOR_SOCKET.getOutputStream()));

String str = "";while(str.compareTo("BYE") != 0){str = RECEBE.readLine();

ENVIA.println("O servidor repete: \"" + str + "\"");ENVIA.flush();

}

RECEBE.close();ENVIA.close();SERVIDOR_SOCKET.close();OUVIDO.close();

Servidor com Threads

Este código se torna o run de uma Thread.

Page 34: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que repete o que o cliente envia:

ServerSocket OUVIDO = new ServerSocket(8008);

while (bEscutando) {Socket SERVIDOR_SOCKET = OUVIDO.accept();

EchoServerThread threadServidora = new EchoServerThread(SERVIDOR_SOCKET);

threadServidora.start();}OUVIDO.close();

Servidor com Threads

Page 35: Java network-sockets-etc

http://publicationslist.org/junio

public class EchoServerThread extends Thread {

private Socket SERVIDOR_SOCKET = null;

public EchoServerThread(Socket umCLIENTE) {this.SERVIDOR_SOCKET = umCLIENTE;

}public void run() {

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

SERVIDOR_SOCKET.getInputStream()));PrintWriter ENVIA = new PrintWriter(

new OutputStreamWriter(SERVIDOR_SOCKET.getOutputStream()));

String str = "";while(str.compareTo("BYE") != 0){

str = RECEBE.readLine();

ENVIA.println("O servidor repete: \"" + str + "\"");ENVIA.flush();

}RECEBE.close();ENVIA.close();SERVIDOR_SOCKET.close();

}}

Servidor com Threads

Page 36: Java network-sockets-etc

http://publicationslist.org/junio

public class EchoServerThread extends Thread {

private Socket SERVIDOR_SOCKET = null;

public EchoServerThread(Socket umCLIENTE) {this.SERVIDOR_SOCKET = umCLIENTE;

}public void run() {

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

SERVIDOR_SOCKET.getInputStream()));PrintWriter ENVIA = new PrintWriter(

new OutputStreamWriter(SERVIDOR_SOCKET.getOutputStream()));

String str = "";while(str.compareTo("BYE") != 0){

str = RECEBE.readLine();

ENVIA.println("O servidor repete: \"" + str + "\"");ENVIA.flush();

}RECEBE.close();ENVIA.close();SERVIDOR_SOCKET.close();

}}

Servidor com Threads

A Thread recebe um socket para se comunicar com o cliente, e passa a ser o servidor para aquele cliente.

Page 37: Java network-sockets-etc

http://publicationslist.org/junio

Servidor TCP para objetos

Page 38: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe objetos do cliente:

Servidor

SERVIDOR

Page 39: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe objetos do cliente:

ServerSocket OUVIDO = new ServerSocket(8008);

Servidor

ServerSocketOUVIDO

SERVIDOR

Page 40: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe objetos do cliente:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

Servidor

ServerSocketOUVIDO

OUVIDO.accept( )

SERVIDOR

Page 41: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe objetos do cliente:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

Servidor

ServerSocketOUVIDO

OUVIDO.accept( )

SERVIDOR CLIENTE

Socket

Page 42: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe objetos do cliente:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

ObjectInputStream RECEBE_OBJETO = new ObjectInputStream(SERVIDOR_SOCKET.getInputStream());

Servidor

ServerSocketOUVIDO

RECEBE

SERVIDOR CLIENTE

ENVIA

Page 43: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe objetos do cliente:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

ObjectInputStream RECEBE_OBJETO = new ObjectInputStream(SERVIDOR_SOCKET.getInputStream());

PrintWriter ENVIA = new PrintWriter(new OutputStreamWriter(

SERVIDOR_SOCKET.getOutputStream()));

Servidor

ServerSocketOUVIDO

RECEBE

SERVIDOR CLIENTE

RECEBE

ENVIA

ENVIA

Page 44: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe objetos do cliente:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

ObjectInputStream RECEBE_OBJETO = new ObjectInputStream(SERVIDOR_SOCKET.getInputStream());

PrintWriter ENVIA = new PrintWriter(new OutputStreamWriter(

SERVIDOR_SOCKET.getOutputStream()));Object oTemp = null;do{oTemp = RECEBE_OBJETO.readObject();

ENVIA.println(“Objeto recebido");ENVIA.flush();

}while(oTemp != null);

Servidor

ServerSocketOUVIDO

RECEBE

SERVIDOR

ENVIA

CLIENTE

RECEBE

ENVIA

Page 45: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe objetos do cliente:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

ObjectInputStream RECEBE_OBJETO = new ObjectInputStream(SERVIDOR_SOCKET.getInputStream());

PrintWriter ENVIA = new PrintWriter(new OutputStreamWriter(

SERVIDOR_SOCKET.getOutputStream()));Object oTemp = null;do{oTemp = RECEBE_OBJETO.readObject();

ENVIA.println(“Objeto recebido");ENVIA.flush();

}while(oTemp != null);

Servidor

ServerSocketOUVIDO

RECEBE

SERVIDOR

ENVIA

CLIENTE

RECEBE

ENVIA

Page 46: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe objetos do cliente:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

ObjectInputStream RECEBE_OBJETO = new ObjectInputStream(SERVIDOR_SOCKET.getInputStream());

PrintWriter ENVIA = new PrintWriter(new OutputStreamWriter(

SERVIDOR_SOCKET.getOutputStream()));Object oTemp = null;do{oTemp = RECEBE_OBJETO.readObject();

ENVIA.println(“Objeto recebido");ENVIA.flush();

}while(oTemp != null);

RECEBE_OBJETO.close();

Servidor

ServerSocketOUVIDO

SERVIDOR

ENVIA

CLIENTE

RECEBE

Page 47: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe objetos do cliente:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

ObjectInputStream RECEBE_OBJETO = new ObjectInputStream(SERVIDOR_SOCKET.getInputStream());

PrintWriter ENVIA = new PrintWriter(new OutputStreamWriter(

SERVIDOR_SOCKET.getOutputStream()));Object oTemp = null;do{oTemp = RECEBE_OBJETO.readObject();

ENVIA.println(“Objeto recebido");ENVIA.flush();

}while(oTemp != null);

RECEBE_OBJETO.close();ENVIA.close();

Servidor

ServerSocketOUVIDO

SERVIDOR CLIENTE

Page 48: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe objetos do cliente:

ServerSocket OUVIDO = new ServerSocket(8008);Socket SERVIDOR_SOCKET = OUVIDO.accept();

ObjectInputStream RECEBE_OBJETO = new ObjectInputStream(SERVIDOR_SOCKET.getInputStream());

PrintWriter ENVIA = new PrintWriter(new OutputStreamWriter(

SERVIDOR_SOCKET.getOutputStream()));Object oTemp = null;do{oTemp = RECEBE_OBJETO.readObject();

ENVIA.println(“Objeto recebido");ENVIA.flush();

}while(oTemp != null);

RECEBE_OBJETO.close();ENVIA.close();SERVIDOR_SOCKET.close();OUVIDO.close();

Servidor

SERVIDOR CLIENTE

Page 49: Java network-sockets-etc

http://publicationslist.org/junio

Cliente TCP para objetos

Page 50: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia objetos ao servidor:

ServerSocketOUVIDO

OUVIDO.accept( )

SERVIDOR CLIENTE

Cliente

Page 51: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia objetos ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

Cliente

ServerSocketOUVIDO

OUVIDO.accept( )

SERVIDOR CLIENTE

Socket

Page 52: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia objetos ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ObjectOutputStream ENVIA_OBJETO = new ObjectOutputStream(CLIENTE_SOCKET.getOutputStream());

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTESocket

RECEBE ENVIA

Page 53: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia objetos ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ObjectOutputStream ENVIA_OBJETO = new ObjectOutputStream(CLIENTE_SOCKET.getOutputStream());

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

CLIENTE_SOCKET.getInputStream()));

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTESocket

RECEBE

ENVIA RECEBE

ENVIA

Page 54: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia objetos ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ObjectOutputStream ENVIA_OBJETO = new ObjectOutputStream(CLIENTE_SOCKET.getOutputStream());

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

CLIENTE_SOCKET.getInputStream()));

lista.add(new Retangulo());lista.add(new Quadrado());lista.add(new Triangulo());

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTESocket

RECEBE

ENVIA RECEBE

ENVIA

Page 55: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia objetos ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ObjectOutputStream ENVIA_OBJETO = new ObjectOutputStream(CLIENTE_SOCKET.getOutputStream());

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

CLIENTE_SOCKET.getInputStream()));

lista.add(new Retangulo());lista.add(new Quadrado());lista.add(new Triangulo());

for(Object o : lista){ENVIA_OBJETO.writeObject(o);System.out.println(RECEBE.readLine());

}

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTESocket

RECEBE

ENVIA RECEBE

ENVIA

Page 56: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia objetos ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ObjectOutputStream ENVIA_OBJETO = new ObjectOutputStream(CLIENTE_SOCKET.getOutputStream());

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

CLIENTE_SOCKET.getInputStream()));

lista.add(new Retangulo());lista.add(new Quadrado());lista.add(new Triangulo());

for(Object o : lista){ENVIA_OBJETO.writeObject(o);System.out.println(RECEBE.readLine());

}ENVIA_OBJETO.writeObject(null);

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTESocket

RECEBE

ENVIA RECEBE

ENVIA

Page 57: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia objetos ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ObjectOutputStream ENVIA_OBJETO = new ObjectOutputStream(CLIENTE_SOCKET.getOutputStream());

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

CLIENTE_SOCKET.getInputStream()));

lista.add(new Retangulo());lista.add(new Quadrado());lista.add(new Triangulo());

for(Object o : lista){ENVIA_OBJETO.writeObject(o);System.out.println(RECEBE.readLine());

}ENVIA_OBJETO.writeObject(null);

ENVIA_OBJETO.close();

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTESocket

ENVIA RECEBE

Page 58: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia objetos ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ObjectOutputStream ENVIA_OBJETO = new ObjectOutputStream(CLIENTE_SOCKET.getOutputStream());

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

CLIENTE_SOCKET.getInputStream()));

lista.add(new Retangulo());lista.add(new Quadrado());lista.add(new Triangulo());

for(Object o : lista){ENVIA_OBJETO.writeObject(o);System.out.println(RECEBE.readLine());

}ENVIA_OBJETO.writeObject(null);

ENVIA_OBJETO.close();RECEBE.close();

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTESocket

Page 59: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que envia objetos ao servidor:Socket CLIENTE_SOCKET = new Socket("localhost", 8008);

ObjectOutputStream ENVIA_OBJETO = new ObjectOutputStream(CLIENTE_SOCKET.getOutputStream());

BufferedReader RECEBE = new BufferedReader(new InputStreamReader(

CLIENTE_SOCKET.getInputStream()));

lista.add(new Retangulo());lista.add(new Quadrado());lista.add(new Triangulo());

for(Object o : lista){ENVIA_OBJETO.writeObject(o);System.out.println(RECEBE.readLine());

}ENVIA_OBJETO.writeObject(null);

ENVIA_OBJETO.close();RECEBE.close();CLIENTE_SOCKET.close();

Cliente

ServerSocketOUVIDO

SERVIDOR CLIENTE

Page 60: Java network-sockets-etc

http://publicationslist.org/junio

Rede – conceitos básicos - UDP• Como vimos, o TCP provê a transmissão segura (com garantia de

entrega), ordenada, e com verificação de erro, de um stream debytes entre dois programas de computador, cada um em um computadordiferente

• No entanto, nem todas as aplicações tem estas necessidades, suponha,por exemplo, uma aplicação peer-to-peer de transferência dearquivos, como o BitTorrent

• Nesta aplicação, garantir entrega e ordem dos bytes podeimpedir seu uso, pois dificultará a gerência e a negociação demúltiplos peers de transferência de arquivo, ao mesmo tempo em quese recebem múltiplos arquivos – isto é, os dados não vem comostreams mas sim como torrentes (do dicionário: água rápida e impetuosaque provém de grandes chuvas)

Page 61: Java network-sockets-etc

http://publicationslist.org/junio

Rede – conceitos básicos - UDP• Em sistemas desta natureza são usados datagramas UDP, ao invés de

streamsTCP

• O protocolo UDP prevê a transmissão de pacotes de dadosindependentes uns dos outros, sem garantia de entrega, e semordem de chegada

• A API Java tem duas classes para o uso do UDP• DatagramPacket• DatagramSocket

Page 62: Java network-sockets-etc

http://publicationslist.org/junio

Servidor UDP simples

Page 63: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe e envia pacotes para o cliente:

Servidor

SERVIDORip1:port1

CLIENTEip2:port2

UDP_SOCKET_CLIENTE

Page 64: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe e envia pacotes para o cliente:DatagramSocket UDP_SOCKET_SERVIDOR = new DatagramSocket(4445);byte[] CAIXA_CORREIO = new byte[256];

Servidor

UDP_SOCKET_SERVIDOR

SERVIDORip1:port1

CLIENTEip2:port2

UDP_SOCKET_CLIENTE

Page 65: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe e envia pacotes para o cliente:DatagramSocket UDP_SOCKET_SERVIDOR = new DatagramSocket(4445);byte[] CAIXA_CORREIO = new byte[256];

Servidor

SERVIDORip1:port1

CLIENTEip2:port2

Internet

UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE

Page 66: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe e envia pacotes para o cliente:DatagramSocket UDP_SOCKET_SERVIDOR = new DatagramSocket(4445);byte[] CAIXA_CORREIO = new byte[256];

DatagramPacket UDP_PACOTE = new DatagramPacket(CAIXA_CORREIO, CAIXA_CORREIO.length);UDP_SOCKET_SERVIDOR.receive(CAIXA_CORREIO);

Servidor

SERVIDORip1:port1

CLIENTEip2:port2

Internet

UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE

Page 67: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe e envia pacotes para o cliente:DatagramSocket UDP_SOCKET_SERVIDOR = new DatagramSocket(4445);byte[] CAIXA_CORREIO = new byte[256];

DatagramPacket UDP_PACOTE = new DatagramPacket(CAIXA_CORREIO, CAIXA_CORREIO.length);UDP_SOCKET_SERVIDOR.receive(CAIXA_CORREIO);

InetAddress REMETENTE_IP = UDP_PACOTE.getAddress();int REMETENTE_PORTA = UDP_PACOTE.getPort();

Servidor

SERVIDORip1:port1

CLIENTEip2:port2

Internet

UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE

Page 68: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe e envia pacotes para o cliente:DatagramSocket UDP_SOCKET_SERVIDOR = new DatagramSocket(4445);byte[] CAIXA_CORREIO = new byte[256];

DatagramPacket UDP_PACOTE = new DatagramPacket(CAIXA_CORREIO, CAIXA_CORREIO.length);UDP_SOCKET_SERVIDOR.receive(CAIXA_CORREIO);

InetAddress REMETENTE_IP = UDP_PACOTE.getAddress();int REMETENTE_PORTA = UDP_PACOTE.getPort();

Servidor

SERVIDORip1:port1

CLIENTEip2:port2

Internet

UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE

Page 69: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe e envia pacotes para o cliente:DatagramSocket UDP_SOCKET_SERVIDOR = new DatagramSocket(4445);byte[] CAIXA_CORREIO = new byte[256];

DatagramPacket UDP_PACOTE = new DatagramPacket(CAIXA_CORREIO, CAIXA_CORREIO.length);UDP_SOCKET_SERVIDOR.receive(CAIXA_CORREIO);

InetAddress REMETENTE_IP = UDP_PACOTE.getAddress();int REMETENTE_PORTA = UDP_PACOTE.getPort();

byte[] A_ENVIAR = new byte[256];A_ENVIAR = (“O poder se consegue pela mão esquerda, mas se dá pela mão direita”).getBytes();UDP_PACOTE = new DatagramPacket(A_ENVIAR,A_ENVIAR.length, REMETENTE_IP, REMETENTE_PORTA);

Servidor

SERVIDORip1:port1

CLIENTEip2:port2

Internet

UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE

Page 70: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe e envia pacotes para o cliente:DatagramSocket UDP_SOCKET_SERVIDOR = new DatagramSocket(4445);byte[] CAIXA_CORREIO = new byte[256];

DatagramPacket UDP_PACOTE = new DatagramPacket(CAIXA_CORREIO, CAIXA_CORREIO.length);UDP_SOCKET_SERVIDOR.receive(CAIXA_CORREIO);

InetAddress REMETENTE_IP = UDP_PACOTE.getAddress();int REMETENTE_PORTA = UDP_PACOTE.getPort();

byte[] A_ENVIAR = new byte[256];A_ENVIAR = (“O poder se consegue pela mão esquerda, mas se dá pela mão direita”).getBytes();UDP_PACOTE = new DatagramPacket(A_ENVIAR,A_ENVIAR.length, REMETENTE_IP, REMETENTE_PORTA);

UDP_SOCKET_SERVIDOR.send(UDP_PACOTE);

Servidor

SERVIDORip1:port1

CLIENTEip2:port2

Internet

UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE

Page 71: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe e envia pacotes para o cliente:DatagramSocket UDP_SOCKET_SERVIDOR = new DatagramSocket(4445);byte[] CAIXA_CORREIO = new byte[256];

DatagramPacket UDP_PACOTE = new DatagramPacket(CAIXA_CORREIO, CAIXA_CORREIO.length);UDP_SOCKET_SERVIDOR.receive(CAIXA_CORREIO);

InetAddress REMETENTE_IP = UDP_PACOTE.getAddress();int REMETENTE_PORTA = UDP_PACOTE.getPort();

byte[] A_ENVIAR = new byte[256];A_ENVIAR = (“O poder se consegue pela mão esquerda, mas se dá pela mão direita”).getBytes();UDP_PACOTE = new DatagramPacket(A_ENVIAR,A_ENVIAR.length, REMETENTE_IP, REMETENTE_PORTA);

UDP_SOCKET_SERVIDOR.send(UDP_PACOTE);

Servidor

SERVIDORip1:port1

CLIENTEip2:port2

Internet

UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE

Page 72: Java network-sockets-etc

http://publicationslist.org/junio

• Servidor que recebe e envia pacotes para o cliente:DatagramSocket UDP_SOCKET_SERVIDOR = new DatagramSocket(4445);byte[] CAIXA_CORREIO = new byte[256];

DatagramPacket UDP_PACOTE = new DatagramPacket(CAIXA_CORREIO, CAIXA_CORREIO.length);UDP_SOCKET_SERVIDOR.receive(CAIXA_CORREIO);

InetAddress REMETENTE_IP = UDP_PACOTE.getAddress();int REMETENTE_PORTA = UDP_PACOTE.getPort();

byte[] A_ENVIAR = new byte[256];A_ENVIAR = (“O poder se consegue pela mão esquerda, mas se dá pela mão direita”).getBytes();UDP_PACOTE = new DatagramPacket(A_ENVIAR,A_ENVIAR.length, REMETENTE_IP, REMETENTE_PORTA);

UDP_SOCKET_SERVIDOR.send(UDP_PACOTE);

UDP_SOCKET_SERVIDOR.close();

Servidor

SERVIDORip1:port1

CLIENTEip2:port2

Internet

UDP_SOCKET_CLIENTE

Page 73: Java network-sockets-etc

http://publicationslist.org/junio

Cliente UDP simples

Page 74: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que recebe e envia pacotes para o servidor:

Cliente

SERVIDORip1:port1

CLIENTEip2:port2

Page 75: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que recebe e envia pacotes para o servidor:byte[] A_ENVIAR = new byte[256];A_ENVIAR = (“Me envie sabedoria”).getBytes();DatagramPacket UDP_PACOTE = new DatagramPacket(A_ENVIAR,IP1, PORT1);

Cliente

SERVIDORip1:port1

CLIENTEip2:port2

UDP_SOCKET_SERVIDOR

Page 76: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que recebe e envia pacotes para o servidor:byte[] A_ENVIAR = new byte[256];A_ENVIAR = (“Me envie sabedoria”).getBytes();DatagramPacket UDP_PACOTE = new DatagramPacket(A_ENVIAR,IP1, PORT1);

DatagramSocket UDP_SOCKET_CLIENTE = new DatagramSocket();

Cliente

SERVIDORip1:port1

CLIENTEip2:port2

InternetInternet

UDP_SOCKET_CLIENTEUDP_SOCKET_SERVIDOR

Page 77: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que recebe e envia pacotes para o servidor:byte[] A_ENVIAR = new byte[256];A_ENVIAR = (“Me envie sabedoria”).getBytes();DatagramPacket UDP_PACOTE = new DatagramPacket(A_ENVIAR,IP1, PORT1);

DatagramSocket UDP_SOCKET_CLIENTE = new DatagramSocket();UDP_SOCKET_CLIENTE.send(UDP_PACOTE);

Cliente

SERVIDORip1:port1

CLIENTEip2:port2

InternetInternet

UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE

Page 78: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que recebe e envia pacotes para o servidor:byte[] A_ENVIAR = new byte[256];A_ENVIAR = (“Me envie sabedoria”).getBytes();DatagramPacket UDP_PACOTE = new DatagramPacket(A_ENVIAR,IP1, PORT1);

DatagramSocket UDP_SOCKET_CLIENTE = new DatagramSocket();UDP_SOCKET_CLIENTE.send(UDP_PACOTE);

Cliente

SERVIDORip1:port1

CLIENTEip2:port2

InternetInternet

UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE

Page 79: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que recebe e envia pacotes para o servidor:byte[] A_ENVIAR = new byte[256];A_ENVIAR = (“Me envie sabedoria”).getBytes();DatagramPacket UDP_PACOTE = new DatagramPacket(A_ENVIAR,IP1, PORT1);

DatagramSocket UDP_SOCKET_CLIENTE = new DatagramSocket();UDP_SOCKET_CLIENTE.send(UDP_PACOTE);

Cliente

SERVIDORip1:port1

CLIENTEip2:port2

InternetInternet

UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE

Page 80: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que recebe e envia pacotes para o servidor:byte[] A_ENVIAR = new byte[256];A_ENVIAR = (“Me envie sabedoria”).getBytes();DatagramPacket UDP_PACOTE = new DatagramPacket(A_ENVIAR,IP1, PORT1);

DatagramSocket UDP_SOCKET_CLIENTE = new DatagramSocket();UDP_SOCKET_CLIENTE.send(UDP_PACOTE);

Cliente

SERVIDORip1:port1

CLIENTEip2:port2

Internet

UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE

Page 81: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que recebe e envia pacotes para o servidor:byte[] A_ENVIAR = new byte[256];A_ENVIAR = (“Me envie sabedoria”).getBytes();DatagramPacket UDP_PACOTE = new DatagramPacket(A_ENVIAR,IP1, PORT1);

DatagramSocket UDP_SOCKET_CLIENTE = new DatagramSocket();UDP_SOCKET_CLIENTE.send(UDP_PACOTE);

Cliente

SERVIDORip1:port1

CLIENTEip2:port2

Internet

UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE

Page 82: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que recebe e envia pacotes para o servidor:byte[] A_ENVIAR = new byte[256];A_ENVIAR = (“Me envie sabedoria”).getBytes();DatagramPacket UDP_PACOTE = new DatagramPacket(A_ENVIAR,IP1, PORT1);

DatagramSocket UDP_SOCKET_CLIENTE = new DatagramSocket();UDP_SOCKET_CLIENTE.send(UDP_PACOTE);

byte[] A_RECEBER = new byte[256];UDP_PACOTE = new DatagramPacket(A_RECEBER, A_RECEBER.length);UDP_SOCKET_CLIENTE.receive(UDP_PACOTE);

Cliente

SERVIDORip1:port1

CLIENTEip2:port2

Internet

UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE

Page 83: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que recebe e envia pacotes para o servidor:byte[] A_ENVIAR = new byte[256];A_ENVIAR = (“Me envie sabedoria”).getBytes();DatagramPacket UDP_PACOTE = new DatagramPacket(A_ENVIAR,IP1, PORT1);

DatagramSocket UDP_SOCKET_CLIENTE = new DatagramSocket();UDP_SOCKET_CLIENTE.send(UDP_PACOTE);

byte[] A_RECEBER = new byte[256];UDP_PACOTE = new DatagramPacket(A_RECEBER, A_RECEBER.length);UDP_SOCKET_CLIENTE.receive(UDP_PACOTE);

System.out.println(new String(UDP_PACOTE.getData(),0,UDP_PACOTE.getLength());

Cliente

SERVIDORip1:port1

CLIENTEip2:port2

Internet

UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE

O poder se consegue pela mão esquerda, mas se dá pela mão direita.

Page 84: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que recebe e envia pacotes para o servidor:byte[] A_ENVIAR = new byte[256];A_ENVIAR = (“Me envie sabedoria”).getBytes();DatagramPacket UDP_PACOTE = new DatagramPacket(A_ENVIAR,IP1, PORT1);

DatagramSocket UDP_SOCKET_CLIENTE = new DatagramSocket();UDP_SOCKET_CLIENTE.send(UDP_PACOTE);

byte[] A_RECEBER = new byte[256];UDP_PACOTE = new DatagramPacket(A_RECEBER, A_RECEBER.length);UDP_SOCKET_CLIENTE.receive(UDP_PACOTE);

System.out.println(new String(UDP_PACOTE.getData(),0,UDP_PACOTE.getLength());

Cliente

SERVIDORip1:port1

CLIENTEip2:port2

Internet

UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE

Page 85: Java network-sockets-etc

http://publicationslist.org/junio

• Cliente que recebe e envia pacotes para o servidor:byte[] A_ENVIAR = new byte[256];A_ENVIAR = (“Me envie sabedoria”).getBytes();DatagramPacket UDP_PACOTE = new DatagramPacket(A_ENVIAR,IP1, PORT1);

DatagramSocket UDP_SOCKET_CLIENTE = new DatagramSocket();UDP_SOCKET_CLIENTE.send(UDP_PACOTE);

byte[] A_RECEBER = new byte[256];UDP_PACOTE = new DatagramPacket(A_RECEBER, A_RECEBER.length);UDP_SOCKET_CLIENTE.receive(UDP_PACOTE);

System.out.println(new String(UDP_PACOTE.getData(),0,UDP_PACOTE.getLength());

UDP_SOCKET_CLIENTE.close();

Cliente

SERVIDORip1:port1

CLIENTEip2:port2

Internet

UDP_SOCKET_SERVIDOR