2. 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 da
rede precisam seguir um protocolo
• Um protocolo é uma sequência de passos necessária para que os dois
computadores 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
3. 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 entre
dois programas de computador, cada um em um computador diferente
• O protocolo Internet Protocol (IP) funciona de maneira
complementar ao TCP (e a outros protocolos) oferecendo
funcionalidades de roteamento entre computadores
• Segundo o IP, um computador é identificado por um número IP
• Em cada computador, processos são identificados por números
de portas
4. 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 a
comunicação entre computadores
• Definição: uma socket é ponto terminal (endpoint = IP:port) de uma
conexão bi-direcional entre dois programas que usam a rede para se
comunicar.
• Uma socket é atrelada a um número de porta, de maneira que o
protocolo TCP possa identificar a aplicação para a qual os dados são
destinados
5. http://publicationslist.org/junio
Sockets
O 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 Socket
2. Abertura de streams de leitura e escrita na Socket
3. Escrita e leitura de dados nas/das streams
4. Fechamento dos streams
5. Fechamento da socket
• O Java abstrai as funcionalidades de rede usando implementações
específicas de cada plataforma (Windows, Mac, Linux, ...)
9. http://publicationslist.org/junio
• Servidor que repete o que o cliente envia:
ServerSocket OUVIDO = new ServerSocket(8008);
Socket SERVIDOR_SOCKET = OUVIDO.accept();
Servidor
ServerSocket
OUVIDO
OUVIDO.accept( )
SERVIDOR
10. http://publicationslist.org/junio
• Servidor que repete o que o cliente envia:
ServerSocket OUVIDO = new ServerSocket(8008);
Socket SERVIDOR_SOCKET = OUVIDO.accept();
Servidor
ServerSocket
OUVIDO
OUVIDO.accept( )
SERVIDOR CLIENTE
Socket
11. 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
ServerSocket
OUVIDO
RECEBE
SERVIDOR CLIENTE
ENVIA
12. 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
ServerSocket
OUVIDO
RECEBE
SERVIDOR CLIENTE
RECEBE
ENVIA
ENVIA
13. 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
ServerSocket
OUVIDO
RECEBE
SERVIDOR
ENVIA
CLIENTE
RECEBE
ENVIA
14. 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
ServerSocket
OUVIDO
RECEBE
SERVIDOR
ENVIA
CLIENTE
RECEBE
ENVIA
15. 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
ServerSocket
OUVIDO
SERVIDOR
ENVIA
CLIENTE
RECEBE
16. 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
ServerSocket
OUVIDO
SERVIDOR CLIENTE
17. 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
18. 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 entre
computadores, pois eles definem o quê e quando as coisas irão
acontecer.
Em todos os próximos exemplos, sempre haverá um
protocolo, por mais simples que seja.
32. 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
33. 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.
34. 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
35. 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
36. 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
AThread recebe um socket para se
comunicar com o cliente, e passa a
ser o servidor para aquele cliente.
51. http://publicationslist.org/junio
• Cliente que envia objetos ao servidor:
Socket CLIENTE_SOCKET = new Socket("localhost", 8008);
Cliente
ServerSocket
OUVIDO
OUVIDO.accept( )
SERVIDOR CLIENTE
Socket
52. 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
ServerSocket
OUVIDO
SERVIDOR CLIENTE
Socket
RECEBE
ENVIA
53. 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
ServerSocket
OUVIDO
SERVIDOR CLIENTE
Socket
RECEBE
ENVIA RECEBE
ENVIA
54. 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
ServerSocket
OUVIDO
SERVIDOR CLIENTE
Socket
RECEBE
ENVIA RECEBE
ENVIA
55. 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
ServerSocket
OUVIDO
SERVIDOR CLIENTE
Socket
RECEBE
ENVIA RECEBE
ENVIA
56. 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
ServerSocket
OUVIDO
SERVIDOR CLIENTE
Socket
RECEBE
ENVIA RECEBE
ENVIA
57. 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
ServerSocket
OUVIDO
SERVIDOR CLIENTE
Socket
ENVIA RECEBE
58. 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
ServerSocket
OUVIDO
SERVIDOR CLIENTE
Socket
59. 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
ServerSocket
OUVIDO
SERVIDOR CLIENTE
60. 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 de
bytes entre dois programas de computador, cada um em um computador
diferente
• No entanto, nem todas as aplicações tem estas necessidades, suponha,
por exemplo, uma aplicação peer-to-peer de transferência de
arquivos, como o BitTorrent
• Nesta aplicação, garantir entrega e ordem dos bytes pode
impedir seu uso, pois dificultará a gerência e a negociação de
múltiplos peers de transferência de arquivo, ao mesmo tempo em que
se recebem múltiplos arquivos – isto é, os dados não vem como
streams mas sim como torrentes (do dicionário: água rápida e impetuosa
que provém de grandes chuvas)
61. 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 dados
independentes uns dos outros, sem garantia de entrega, e sem
ordem de chegada
• A API Java tem duas classes para o uso do UDP
• DatagramPacket
• DatagramSocket
64. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
UDP_SOCKET_CLIENTE
65. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
Internet
UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE
66. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
Internet
UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE
67. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
Internet
UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE
68. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
Internet
UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE
69. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
Internet
UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE
70. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
Internet
UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE
71. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
Internet
UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE
72. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
Internet
UDP_SOCKET_CLIENTE
75. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
UDP_SOCKET_SERVIDOR
76. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
InternetInternet
UDP_SOCKET_CLIENTEUDP_SOCKET_SERVIDOR
77. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
InternetInternet
UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE
78. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
InternetInternet
UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE
79. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
InternetInternet
UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE
80. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
Internet
UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE
81. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
Internet
UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE
82. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
Internet
UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE
83. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
Internet
UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE
O poder se
consegue pela
mão esquerda,
mas se dá pela
mão direita.
84. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
Internet
UDP_SOCKET_SERVIDOR UDP_SOCKET_CLIENTE
85. 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
SERVIDOR
ip1:port1
CLIENTE
ip2:port2
Internet
UDP_SOCKET_SERVIDOR