Java network-sockets-etc

332 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
332
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Java network-sockets-etc

  1. 1. http://publicationslist.org/junio Rede Prof. Jose Fernando Rodrigues Junior http://www.icmc.usp.br/~junio junio@icmc.usp.br INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO - USP SCC0504 - Programação Orientada a Objetos
  2. 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. 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. 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. 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, ...)
  6. 6. http://publicationslist.org/junio Servidor TCP simples
  7. 7. http://publicationslist.org/junio • Servidor que repete o que o cliente envia: Servidor SERVIDOR
  8. 8. http://publicationslist.org/junio • Servidor que repete o que o cliente envia: ServerSocket OUVIDO = new ServerSocket(8008); Servidor ServerSocket OUVIDO SERVIDOR
  9. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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.
  19. 19. http://publicationslist.org/junio Cliente TCP simples
  20. 20. http://publicationslist.org/junio • Cliente que envia texto ao servidor: ServerSocket OUVIDO OUVIDO.accept( ) SERVIDOR CLIENTE Cliente
  21. 21. http://publicationslist.org/junio • Cliente que envia texto ao servidor: Socket CLIENTE_SOCKET = new Socket("localhost", 8008); Cliente ServerSocket OUVIDO OUVIDO.accept( ) SERVIDOR CLIENTE Socket
  22. 22. 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 ServerSocket OUVIDO SERVIDOR CLIENTE Socket RECEBE ENVIA
  23. 23. 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 ServerSocket OUVIDO SERVIDOR CLIENTE Socket RECEBE ENVIA RECEBE ENVIA
  24. 24. 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 ServerSocket OUVIDO SERVIDOR CLIENTE Socket RECEBE ENVIA RECEBE ENVIA
  25. 25. 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 ServerSocket OUVIDO SERVIDOR CLIENTE Socket RECEBE ENVIA RECEBE ENVIA
  26. 26. 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 ServerSocket OUVIDO SERVIDOR CLIENTE Socket RECEBE ENVIA RECEBE ENVIA
  27. 27. 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 ServerSocket OUVIDO SERVIDOR CLIENTE Socket ENVIA RECEBE
  28. 28. 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 ServerSocket OUVIDO SERVIDOR CLIENTE Socket
  29. 29. 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 ServerSocket OUVIDO SERVIDOR CLIENTE Socket
  30. 30. 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 ServerSocket OUVIDO SERVIDOR CLIENTE
  31. 31. http://publicationslist.org/junio Servidor TCP simples para múltiplos clientes usando Threads
  32. 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. 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. 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. 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. 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.
  37. 37. http://publicationslist.org/junio Servidor TCP para objetos
  38. 38. http://publicationslist.org/junio • Servidor que recebe objetos do cliente: Servidor SERVIDOR
  39. 39. http://publicationslist.org/junio • Servidor que recebe objetos do cliente: ServerSocket OUVIDO = new ServerSocket(8008); Servidor ServerSocket OUVIDO SERVIDOR
  40. 40. http://publicationslist.org/junio • Servidor que recebe objetos do cliente: ServerSocket OUVIDO = new ServerSocket(8008); Socket SERVIDOR_SOCKET = OUVIDO.accept(); Servidor ServerSocket OUVIDO OUVIDO.accept( ) SERVIDOR
  41. 41. http://publicationslist.org/junio • Servidor que recebe objetos do cliente: ServerSocket OUVIDO = new ServerSocket(8008); Socket SERVIDOR_SOCKET = OUVIDO.accept(); Servidor ServerSocket OUVIDO OUVIDO.accept( ) SERVIDOR CLIENTE Socket
  42. 42. 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 ServerSocket OUVIDO RECEBE SERVIDOR CLIENTE ENVIA
  43. 43. 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 ServerSocket OUVIDO RECEBE SERVIDOR CLIENTE RECEBE ENVIA ENVIA
  44. 44. 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 ServerSocket OUVIDO RECEBE SERVIDOR ENVIA CLIENTE RECEBE ENVIA
  45. 45. 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 ServerSocket OUVIDO RECEBE SERVIDOR ENVIA CLIENTE RECEBE ENVIA
  46. 46. 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 ServerSocket OUVIDO SERVIDOR ENVIA CLIENTE RECEBE
  47. 47. 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 ServerSocket OUVIDO SERVIDOR CLIENTE
  48. 48. 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
  49. 49. http://publicationslist.org/junio Cliente TCP para objetos
  50. 50. http://publicationslist.org/junio • Cliente que envia objetos ao servidor: ServerSocket OUVIDO OUVIDO.accept( ) SERVIDOR CLIENTE Cliente
  51. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  62. 62. http://publicationslist.org/junio Servidor UDP simples
  63. 63. http://publicationslist.org/junio • Servidor que recebe e envia pacotes para o cliente: Servidor SERVIDOR ip1:port1 CLIENTE ip2:port2 UDP_SOCKET_CLIENTE
  64. 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. 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. 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. 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. 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. 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. 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. 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. 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
  73. 73. http://publicationslist.org/junio Cliente UDP simples
  74. 74. http://publicationslist.org/junio • Cliente que recebe e envia pacotes para o servidor: Cliente SERVIDOR ip1:port1 CLIENTE ip2:port2
  75. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×