Sockets em Java


Elenils on Vieira
Embaixador de Campus da Sun
Universidade Federal da Paraíba
blogs.sun.com/elenilsonvie...
2
Agenda
1 – Motivação
2 – Definição
3 – Protocolos
4 – Modelo Cliente-Servidor
5 – Formas de Comunicação
6 – Estados de um ...
Footnote position, 12 pts.

                             Sun Confidential: Internal Only   4
Quem conhece
Programação Distribuída?




          Sun Confidential: Internal Only   5
Footnote position, 12 pts.

                             Sun Confidential: Internal Only   6
Por que aprender a programar com sockets?

  •   Programar para Internet
  •   Programar para rede local
  •   Comunicação...
Agenda
1 – Motivação
2 – Definição
3 – Protocolos
4 – Modelo Cliente-Servidor
5 – Formas de Comunicação
6 – Estados de um ...
Definição




  Sun Confidential: Internal Only   9
Sun Confidential: Internal Only   10
O que é um Socket?
• Representação interna do sistema operacional para
  um ponto de comunicação
• Cada endpoint é represe...
O que é Socket?
• Uma porta serve para identificar processos
  comunicantes
• A interface padronizada de soquetes surgiu
 ...
Host#1                                                                       Host #n




Processo #1
                 …   ...
Agenda
1 – Motivação
2 – Definição
3 – Protocolos
4 – Modelo Cliente-Servidor
5 – Formas de Comunicação
6 – Estados de um ...
Protocolos




  Sun Confidential: Internal Only   15
O que é um
                                  Protocolo?




Sun Confidential: Internal Only                16
Protocolos
• São regras para a comunicação entre duas
  aplicações, computadores, dispositivos, etc.
• Em programação, pro...
oi

envie os dados
   soma 2 2

         4

   Multi 2 4

          8

     tchau

     Sun Confidential: Internal Only   ...
Protocolos
• São a interface de um módulo ou de uma camada
  de rede
• Exemplo : TCP/IP, Telnet, HTTP, SMTP, FTP,
  NNTP, ...
Agenda
1 – Motivação
2 – Definição
3 – Protocolos
4 – Modelo Cliente-Servidor
5 – Formas de Comunicação
6 – Estados de um ...
Modelo Cliente-Servidor




         Sun Confidential: Internal Only   21
O que é o Modelo
                 Cliente-Servidor?




Sun Confidential: Internal Only   22
Modelo Cliente-Servidor
• Sockets se baseia no modelo cliente/servidor
  > O cliente é um processo ou aplicação que requis...
Modelo Cliente-Servidor
• Interação
     > paradigma requisição-resposta




Footnote position, 12 pts.

                 ...
Modelo Cliente-Servidor




Footnote position, 12 pts.

                             Sun Confidential: Internal Only   25
Agenda
1 – Motivação
2 – Definição
3 – Protocolos
4 – Modelo Cliente-Servidor
5 – Formas de Comunicação
6 – Estados de um ...
Formas de Comunicação




Footnote position, 12 pts.

                             Sun Confidential: Internal Only   27
Dois tipos de comunicação
• Com conexão
• Sem conexão




                Sun Confidential: Internal Only   28
Sem Conexão
• Cliente e servidor não precisam estabelecer
  nenhuma conexão, isto é, a qualquer momento um
  processo pode...
Sem Conexão




              Sun Confidential: Internal Only   30
Com Conexão
• Deve ser estabelecida uma conexão para depois
  poderem enviar e receber dados.
• Exemplo:
  > Socket TCP


...
Com Conexão




              Sun Confidential: Internal Only   32
Sun Confidential: Internal Only   33
Com Conexão




              Sun Confidential: Internal Only   34
Agenda
1 – Motivação
2 – Definição
3 – Protocolos
4 – Modelo Cliente-Servidor
5 – Formas de Comunicação
6 – Estados de um ...
Estados de um Socket




Footnote position, 12 pts.

                             Sun Confidential: Internal Only   36
Estados de um Socket
 • Socket Passivo: espera por uma conexão
       > Usado por Servidores
       > Closed  listen  es...
Estados de um Socket
• Socket Ativo: Inicia uma conexão
     > Usado pelos Clientes
     > Closed  Established




Footno...
Agenda
1 – Motivação
2 – Definição
3 – Protocolos
4 – Modelo Cliente-Servidor
5 – Formas de Comunicação
6 – Estados de um ...
API Sockets - Primitivas




Footnote position, 12 pts.

                             Sun Confidential: Internal Only   40
Primitivas
 Função     Descrição

 Socket     Cria um novo ponto de comunicação

 Bind       Associa o enrederço IP e a po...
API Socket
Classe           Descrição

Socket           Construtor Socket(InetAddress,int), cria o socket e realiza o bind...
E o Read e o Write?
  • Em Java você precisa usar extensões das classes
    abstratas InputStream e OutputStream.
  • Os m...
E o Read e o Write?
• A escolha do InputStream/OutputStream depende
  da aplicação, consulte a API.
• Pode-se usar diretam...
Hora de Programar!!!




                       Sun Confidential: Internal Only   45
Interagir com Socket de Java




              Sun Confidential: Internal Only   46
Interagir com Socket de Java




              Sun Confidential: Internal Only   47
Comunicação com Conexão
                                                  socket( ) servidor
     cliente       socket( ) ...
Comunicação sem Conexão

  cliente          socket( )                                      socket( )
                     ...
Agenda
1 – Motivação
2 – Definição
3 – Protocolos
4 – Modelo Cliente-Servidor
5 – Formas de Comunicação
6 – Estados de um ...
Cliente
                                                               em Java




Footnote position, 12 pts.

           ...
Cliente em Java




              Sun Confidential: Internal Only   52
Agenda
1 – Motivação
2 – Definição
3 – Protocolos
4 – Modelo Cliente-Servidor
5 – Formas de Comunicação
6 – Estados de um ...
Servidor em Java




      Sun Confidential: Internal Only   54
Servidor em Java




              Sun Confidential: Internal Only   55
Hora de Programar!!!




                       Sun Confidential: Internal Only   56
Implementar uma calculadora
     utilizando Sockets




          Sun Confidential: Internal Only   57
Hora de Programar!!!




                       Sun Confidential: Internal Only   60
• Nos exemplos anteriores, o servidor é capaz de
   responder apenas a uma requisição por vez
 • A primitiva accept é bloq...
Servidor Monothread




             Sun Confidential: Internal Only   62
Agenda
1 – Motivação
2 – Definição
3 – Protocolos
4 – Modelo Cliente-Servidor
5 – Formas de Comunicação
6 – Estados de um ...
Servidor Multithread
       Sun Confidential: Internal Only   64
Relembrando Criação de Threads
 • Implementando a Classe Runnable




Footnote position, 12 pts.

                        ...
Relembrando Criação de Threads
 • Extendendo a Classe Thread




Footnote position, 12 pts.

                             ...
Servidor Multithread
• Podemos criar uma classe para o tratamento da
  requisição implementando a interface Runnable
• Ent...
Servidor Multithread




               Sun Confidential: Internal Only   68
Servidor Multithread




               Sun Confidential: Internal Only   69
Falamos de servidor multithreaded,
     mas e quanto ao cliente?




             Sun Confidential: Internal Only   70
Servidor Multithread




               Sun Confidential: Internal Only   71
Hora de Programar!!!




                       Sun Confidential: Internal Only   72
Implementar o servidor
     Multithread




       Sun Confidential: Internal Only   73
Como ficaria a calculadora
     MultiThread?




        Sun Confidential: Internal Only   74
Hora de Programar!!!




                       Sun Confidential: Internal Only   75
Implementar a calculadora
      Multithread




        Sun Confidential: Internal Only   76
Agenda
1 – Motivação
2 – Definição
3 – Protocolos
4 – Modelo Cliente-Servidor
5 – Formas de Comunicação
6 – Estados de um ...
Enviando Objetos
• Utilizamos as classes
  > ObjectOutputStream
     – writeObject(objeto)
  > ObjectInputStream
     – re...
Sun Confidential: Internal Only   79
Sun Confidential: Internal Only   80
Sun Confidential: Internal Only   81
Hora de Programar!!!




                       Sun Confidential: Internal Only   82
Implementar o envio de
      Objetos




        Sun Confidential: Internal Only   83
Agenda
1 – Motivação
2 – Definição
3 – Protocolos
4 – Modelo Cliente-Servidor
5 – Formas de Comunicação
6 – Estados de um ...
DatagramSocket
• Podemos enviar e receber pacotes sem a
  necessidade de uma conexão
• São raros, mas alguns problemas pod...
DatagramSocket
• Utilizamos essa classe para criar o Socket
  > DatagramSocket(porta)


• Utilizamos essa classe para cria...
No Servidor
• Cria um DatagramSocket e indica em qual porta
  estará a escuta
  > DatagramSocket ds = new DatagramSocket(5...
No Servidor




              Sun Confidential: Internal Only   88
No Cliente

• Utilizamos essa classe para criar o Socket
  > DatagramSocket()


• Utilizamos essa classe para criar o paco...
No Cliente




             Sun Confidential: Internal Only   90
No Cliente




             Sun Confidential: Internal Only   91
No Cliente




             Sun Confidential: Internal Only   92
Hora de Programar!!!




                       Sun Confidential: Internal Only   93
Implementar o envio de
dados com DatagramSocket




        Sun Confidential: Internal Only   94
Agenda
1 – Motivação
2 – Definição
3 – Protocolos
4 – Modelo Cliente-Servidor
5 – Formas de Comunicação
6 – Estados de um ...
Observações
   Sun Confidential: Internal Only   96
Observações
• Muitas coisas podem dar errado na comunicação em rede
  >   Não é possível resolver o nome
  >   O host não ...
Observações
• Fique atento!
     > Trate as exceções
     > Defina um timeout com o objeto socket:
           – Socket s =...
Como eu faria para meu servidor executar então alguma
     operação como uma requisição do cliente?

• Vocês observaram o ...
Agenda
1 – Motivação
2 – Definição
3 – Protocolos
4 – Modelo Cliente-Servidor
5 – Formas de Comunicação
6 – Estados de um ...
RaceFX
Sun Confidential: Internal Only            101
RaceFX
 • Jogo desenvolvidor em JavaFX por Raphael
   Marques (raphaelmarques.wordpress.com/)

 • Utiliza Sockets para a c...
Hora de Programar!!!




                       Sun Confidential: Internal Only   103
RaceFX – Trabalho Final do Mini-Curso
• Implementar a comunicação entre o cliente e o
  servidor
  > Classes: Server e Cli...
Classe Client.java




      Sun Confidential: Internal Only   105
Construtor




             Sun Confidential: Internal Only   106
RaceFX – Trabalho Final do Mini-Curso




               Sun Confidential: Internal Only   107
Método send(SenderCar)




              Sun Confidential: Internal Only   108
Classe Server.java




      Sun Confidential: Internal Only   109
Construtor




             Sun Confidential: Internal Only   110
Sun Confidential: Internal Only   111
Método send(SenderCar)




              Sun Confidential: Internal Only   112
E o que eu tenho
   que enviar?



                   Sun Confidential: Internal Only   113
Classe SenderCar.java




       Sun Confidential: Internal Only   114
Sun Confidential: Internal Only   115
Perguntas




 Footnote position, 12 pts.

                              Sun Confidential: Internal Only   116
Sockets em Java


Elenils on Vieira
Embaixador de Campus da Sun
Universidade Federal da Paraíba
blogs.sun.com/elenilsonvie...
Mini-Curso de Sockets no Unipê
Mini-Curso de Sockets no Unipê
Upcoming SlideShare
Loading in …5
×

Mini-Curso de Sockets no Unipê

2,910 views

Published on

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

No Downloads
Views
Total views
2,910
On SlideShare
0
From Embeds
0
Number of Embeds
40
Actions
Shares
0
Downloads
220
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Mini-Curso de Sockets no Unipê

  1. 1. Sockets em Java Elenils on Vieira Embaixador de Campus da Sun Universidade Federal da Paraíba blogs.sun.com/elenilsonvieira elenilson.vieira@sun.com 1
  2. 2. 2
  3. 3. Agenda 1 – Motivação 2 – Definição 3 – Protocolos 4 – Modelo Cliente-Servidor 5 – Formas de Comunicação 6 – Estados de um Socket 7 – API Socket - Primitivas 8 – Cliente em Java 9 – Servidor em Java 10 – Servidor Multi-thread 11 – Enviando Objetos 12 – DatagramSocket 13 – Observações 14 – RaceFX 3
  4. 4. Footnote position, 12 pts. Sun Confidential: Internal Only 4
  5. 5. Quem conhece Programação Distribuída? Sun Confidential: Internal Only 5
  6. 6. Footnote position, 12 pts. Sun Confidential: Internal Only 6
  7. 7. Por que aprender a programar com sockets? • Programar para Internet • Programar para rede local • Comunicação inter-processos • A interface socket tornou-se quase tão popular entre os programadores quanto a própria Internet. Sun Confidential: Internal Only 7
  8. 8. Agenda 1 – Motivação 2 – Definição 3 – Protocolos 4 – Modelo Cliente-Servidor 5 – Formas de Comunicação 6 – Estados de um Socket 7 – API Socket - Primitivas 8 – Cliente em Java 9 – Servidor em Java 10 – Servidor Multi-thread 11 – Enviando Objetos 12 – DatagramSocket 13 – Observações 14 – RaceFX 8
  9. 9. Definição Sun Confidential: Internal Only 9
  10. 10. Sun Confidential: Internal Only 10
  11. 11. O que é um Socket? • Representação interna do sistema operacional para um ponto de comunicação • Cada endpoint é representado por um par (endereço_ip,porta) Sun Confidential: Internal Only 11
  12. 12. O que é Socket? • Uma porta serve para identificar processos comunicantes • A interface padronizada de soquetes surgiu originalmente no sistema operacional Unix BSD (Berkeley Software Distribution); por isso, eles são muitas vezes chamados de Berkeley Sockets. Sun Confidential: Internal Only 12
  13. 13. Host#1 Host #n Processo #1 … Processo #m Processo #1 … Processo #k Porta #1 Porta #m Porta #1 Porta #k Pilha de rede do sitema operacional … Pilha de rede do Sistema operacional Endereço IP#1 Endereço IP #n Network Sun Confidential: Internal Only 13
  14. 14. Agenda 1 – Motivação 2 – Definição 3 – Protocolos 4 – Modelo Cliente-Servidor 5 – Formas de Comunicação 6 – Estados de um Socket 7 – API Socket - Primitivas 8 – Cliente em Java 9 – Servidor em Java 10 – Servidor Multi-thread 11 – Enviando Objetos 12 – DatagramSocket 13 – Observações 14 – RaceFX 14
  15. 15. Protocolos Sun Confidential: Internal Only 15
  16. 16. O que é um Protocolo? Sun Confidential: Internal Only 16
  17. 17. Protocolos • São regras para a comunicação entre duas aplicações, computadores, dispositivos, etc. • Em programação, protocolos são funções que implementam serviços de comunicação Sun Confidential: Internal Only 17
  18. 18. oi envie os dados soma 2 2 4 Multi 2 4 8 tchau Sun Confidential: Internal Only 18
  19. 19. Protocolos • São a interface de um módulo ou de uma camada de rede • Exemplo : TCP/IP, Telnet, HTTP, SMTP, FTP, NNTP, SNMP, ARP, RARP, BOOTP, ICMP, IGMP, etc. Sun Confidential: Internal Only 19
  20. 20. Agenda 1 – Motivação 2 – Definição 3 – Protocolos 4 – Modelo Cliente-Servidor 5 – Formas de Comunicação 6 – Estados de um Socket 7 – API Socket - Primitivas 8 – Cliente em Java 9 – Servidor em Java 10 – Servidor Multi-thread 11 – Enviando Objetos 12 – DatagramSocket 13 – Observações 14 – RaceFX 20
  21. 21. Modelo Cliente-Servidor Sun Confidential: Internal Only 21
  22. 22. O que é o Modelo Cliente-Servidor? Sun Confidential: Internal Only 22
  23. 23. Modelo Cliente-Servidor • Sockets se baseia no modelo cliente/servidor > O cliente é um processo ou aplicação que requisita um serviço oferecido por um servidor. > O servidor aceita as requisições dos clientes, realiza o processamento delas Sun Confidential: Internal Only 23
  24. 24. Modelo Cliente-Servidor • Interação > paradigma requisição-resposta Footnote position, 12 pts. Sun Confidential: Internal Only 24
  25. 25. Modelo Cliente-Servidor Footnote position, 12 pts. Sun Confidential: Internal Only 25
  26. 26. Agenda 1 – Motivação 2 – Definição 3 – Protocolos 4 – Modelo Cliente-Servidor 5 – Formas de Comunicação 6 – Estados de um Socket 7 – API Socket - Primitivas 8 – Cliente em Java 9 – Servidor em Java 10 – Servidor Multi-thread 11 – Enviando Objetos 12 – DatagramSocket 13 – Observações 14 – RaceFX 26
  27. 27. Formas de Comunicação Footnote position, 12 pts. Sun Confidential: Internal Only 27
  28. 28. Dois tipos de comunicação • Com conexão • Sem conexão Sun Confidential: Internal Only 28
  29. 29. Sem Conexão • Cliente e servidor não precisam estabelecer nenhuma conexão, isto é, a qualquer momento um processo pode enviar ou receber dados • Exemplos desse tipo de comunicação: > Socket UDP Footnote position, 12 pts. Sun Confidential: Internal Only 29
  30. 30. Sem Conexão Sun Confidential: Internal Only 30
  31. 31. Com Conexão • Deve ser estabelecida uma conexão para depois poderem enviar e receber dados. • Exemplo: > Socket TCP Sun Confidential: Internal Only 31
  32. 32. Com Conexão Sun Confidential: Internal Only 32
  33. 33. Sun Confidential: Internal Only 33
  34. 34. Com Conexão Sun Confidential: Internal Only 34
  35. 35. Agenda 1 – Motivação 2 – Definição 3 – Protocolos 4 – Modelo Cliente-Servidor 5 – Formas de Comunicação 6 – Estados de um Socket 7 – API Socket - Primitivas 8 – Cliente em Java 9 – Servidor em Java 10 – Servidor Multi-thread 11 – Enviando Objetos 12 – DatagramSocket 13 – Observações 14 – RaceFX 35
  36. 36. Estados de um Socket Footnote position, 12 pts. Sun Confidential: Internal Only 36
  37. 37. Estados de um Socket • Socket Passivo: espera por uma conexão > Usado por Servidores > Closed  listen  established > Obs. O socket TCP também possui outros estados Footnote position, 12 pts. Sun Confidential: Internal Only 37
  38. 38. Estados de um Socket • Socket Ativo: Inicia uma conexão > Usado pelos Clientes > Closed  Established Footnote position, 12 pts. Sun Confidential: Internal Only 38
  39. 39. Agenda 1 – Motivação 2 – Definição 3 – Protocolos 4 – Modelo Cliente-Servidor 5 – Formas de Comunicação 6 – Estados de um Socket 7 – API Socket - Primitivas 8 – Cliente em Java 9 – Servidor em Java 10 – Servidor Multi-thread 11 – Enviando Objetos 12 – DatagramSocket 13 – Observações 14 – RaceFX 39
  40. 40. API Sockets - Primitivas Footnote position, 12 pts. Sun Confidential: Internal Only 40
  41. 41. Primitivas Função Descrição Socket Cria um novo ponto de comunicação Bind Associa o enrederço IP e a porta ao endpoint local do socket Listen Indica que o socket esta pronto para aceitar requisição de conexões Accept Bloqueia o processo até a chegada de uma requisição de conexão Connect Estabelece uma conexão com um endpoint remoto Read Ler dados de um socket conectado (TCP) Recvfrom Ler dados de um socket não conectado (UDP) Write Envia dados ao endpoint remoto conectado (TCP) Sendto Envia dados ao endpoint remoto informado no parâmetro (UDP) Close Fecha o socket Sun Confidential: Internal Only 41
  42. 42. API Socket Classe Descrição Socket Construtor Socket(InetAddress,int), cria o socket e realiza o bind e connect Construtor Socket(String,int), cria o socket e realiza o bind e connect DatagramSocket Construtor DatagramSocket(int) cria o socket e realiza o bind ServerSocket Construtor ServerSocket(int), cria o socket e realiza o bind e listen Método close Comum às três classes. Realiza o close, fecha o socket e libera a porta. Sun Confidential: Internal Only 42
  43. 43. E o Read e o Write? • Em Java você precisa usar extensões das classes abstratas InputStream e OutputStream. • Os métodos getInputStream e getOutputStream de Socket e ServerSocket retornam um InputStream e output stream Footnote position, 12 pts. Sun Confidential: Internal Only 43
  44. 44. E o Read e o Write? • A escolha do InputStream/OutputStream depende da aplicação, consulte a API. • Pode-se usar diretamente objetos InputStream/OutputStream com as classes Scanner/PrintWriter respectivamente para ler e escrever nos sockets Sun Confidential: Internal Only 44
  45. 45. Hora de Programar!!! Sun Confidential: Internal Only 45
  46. 46. Interagir com Socket de Java Sun Confidential: Internal Only 46
  47. 47. Interagir com Socket de Java Sun Confidential: Internal Only 47
  48. 48. Comunicação com Conexão socket( ) servidor cliente socket( ) bind( ) bind( ) TCP conn. request listen( ) connect( ) accept( send( ) TCP ACK ) recv( ) recv( ) send( ) close( ) close( ) Controlado pelo desenvolvedor processo processo da aplicação socket socket Controlado pelo sistema TCP internet TCP operacional Sun Confidential: Internal Only 48
  49. 49. Comunicação sem Conexão cliente socket( ) socket( ) servidor bind( ) bind( ) send() recv( ) recv( ) send( ) close( ) close( ) Controlado pelo desenvolvedor processo processo da aplicação socket socket Controlado pelo UDP UDP sistema internet operacional Sun Confidential: Internal Only 49
  50. 50. Agenda 1 – Motivação 2 – Definição 3 – Protocolos 4 – Modelo Cliente-Servidor 5 – Formas de Comunicação 6 – Estados de um Socket 7 – API Socket - Primitivas 8 – Cliente em Java 9 – Servidor em Java 10 – Servidor Multi-thread 11 – Enviando Objetos 12 – DatagramSocket 13 – Observações 14 – RaceFX 50
  51. 51. Cliente em Java Footnote position, 12 pts. Sun Confidential: Internal Only 51
  52. 52. Cliente em Java Sun Confidential: Internal Only 52
  53. 53. Agenda 1 – Motivação 2 – Definição 3 – Protocolos 4 – Modelo Cliente-Servidor 5 – Formas de Comunicação 6 – Estados de um Socket 7 – API Socket - Primitivas 8 – Cliente em Java 9 – Servidor em Java 10 – Servidor Multi-thread 11 – Enviando Objetos 12 – DatagramSocket 13 – Observações 14 – RaceFX 53
  54. 54. Servidor em Java Sun Confidential: Internal Only 54
  55. 55. Servidor em Java Sun Confidential: Internal Only 55
  56. 56. Hora de Programar!!! Sun Confidential: Internal Only 56
  57. 57. Implementar uma calculadora utilizando Sockets Sun Confidential: Internal Only 57
  58. 58. Hora de Programar!!! Sun Confidential: Internal Only 60
  59. 59. • Nos exemplos anteriores, o servidor é capaz de responder apenas a uma requisição por vez • A primitiva accept é bloqueante! Ela bloqueia o processo até que seja recebida uma requisição • Precisamos atender a vários clientes Footnote position, 12 pts. Sun Confidential: Internal Only 61
  60. 60. Servidor Monothread Sun Confidential: Internal Only 62
  61. 61. Agenda 1 – Motivação 2 – Definição 3 – Protocolos 4 – Modelo Cliente-Servidor 5 – Formas de Comunicação 6 – Estados de um Socket 7 – API Socket - Primitivas 8 – Cliente em Java 9 – Servidor em Java 10 – Servidor Multi-thread 11 – Enviando Objetos 12 – DatagramSocket 13 – Observações 14 – RaceFX 63
  62. 62. Servidor Multithread Sun Confidential: Internal Only 64
  63. 63. Relembrando Criação de Threads • Implementando a Classe Runnable Footnote position, 12 pts. Sun Confidential: Internal Only 65
  64. 64. Relembrando Criação de Threads • Extendendo a Classe Thread Footnote position, 12 pts. Sun Confidential: Internal Only 66
  65. 65. Servidor Multithread • Podemos criar uma classe para o tratamento da requisição implementando a interface Runnable • Então basta criarmos uma thread a cada chamada do accept Sun Confidential: Internal Only 67
  66. 66. Servidor Multithread Sun Confidential: Internal Only 68
  67. 67. Servidor Multithread Sun Confidential: Internal Only 69
  68. 68. Falamos de servidor multithreaded, mas e quanto ao cliente? Sun Confidential: Internal Only 70
  69. 69. Servidor Multithread Sun Confidential: Internal Only 71
  70. 70. Hora de Programar!!! Sun Confidential: Internal Only 72
  71. 71. Implementar o servidor Multithread Sun Confidential: Internal Only 73
  72. 72. Como ficaria a calculadora MultiThread? Sun Confidential: Internal Only 74
  73. 73. Hora de Programar!!! Sun Confidential: Internal Only 75
  74. 74. Implementar a calculadora Multithread Sun Confidential: Internal Only 76
  75. 75. Agenda 1 – Motivação 2 – Definição 3 – Protocolos 4 – Modelo Cliente-Servidor 5 – Formas de Comunicação 6 – Estados de um Socket 7 – API Socket - Primitivas 8 – Cliente em Java 9 – Servidor em Java 10 – Servidor Multi-thread 11 – Enviando Objetos 12 – DatagramSocket 13 – Observações 14 – RaceFX 77
  76. 76. Enviando Objetos • Utilizamos as classes > ObjectOutputStream – writeObject(objeto) > ObjectInputStream – readObject() • O objeto precisa implemente Serializable Sun Confidential: Internal Only 78
  77. 77. Sun Confidential: Internal Only 79
  78. 78. Sun Confidential: Internal Only 80
  79. 79. Sun Confidential: Internal Only 81
  80. 80. Hora de Programar!!! Sun Confidential: Internal Only 82
  81. 81. Implementar o envio de Objetos Sun Confidential: Internal Only 83
  82. 82. Agenda 1 – Motivação 2 – Definição 3 – Protocolos 4 – Modelo Cliente-Servidor 5 – Formas de Comunicação 6 – Estados de um Socket 7 – API Socket - Primitivas 8 – Cliente em Java 9 – Servidor em Java 10 – Servidor Multi-thread 11 – Enviando Objetos 12 – DatagramSocket 13 – Observações 14 – RaceFX 84
  83. 83. DatagramSocket • Podemos enviar e receber pacotes sem a necessidade de uma conexão • São raros, mas alguns problemas podem acontecer > Pacotes podem não chegar > Pacotes podem chegar fora de ordem > Pacotes podem chegar duplicados Sun Confidential: Internal Only 85
  84. 84. DatagramSocket • Utilizamos essa classe para criar o Socket > DatagramSocket(porta) • Utilizamos essa classe para criar o pacote > DatagramPacket(dados, tamanho_dos_dados) Sun Confidential: Internal Only 86
  85. 85. No Servidor • Cria um DatagramSocket e indica em qual porta estará a escuta > DatagramSocket ds = new DatagramSocket(5000); • Cria um DatagramPacket e chama o método receive do socket Sun Confidential: Internal Only 87
  86. 86. No Servidor Sun Confidential: Internal Only 88
  87. 87. No Cliente • Utilizamos essa classe para criar o Socket > DatagramSocket() • Utilizamos essa classe para criar o pacote > DatagramPacket(dados, tamanho_dos_dados, endereco_servidor, porta_servidor) Sun Confidential: Internal Only 89
  88. 88. No Cliente Sun Confidential: Internal Only 90
  89. 89. No Cliente Sun Confidential: Internal Only 91
  90. 90. No Cliente Sun Confidential: Internal Only 92
  91. 91. Hora de Programar!!! Sun Confidential: Internal Only 93
  92. 92. Implementar o envio de dados com DatagramSocket Sun Confidential: Internal Only 94
  93. 93. Agenda 1 – Motivação 2 – Definição 3 – Protocolos 4 – Modelo Cliente-Servidor 5 – Formas de Comunicação 6 – Estados de um Socket 7 – API Socket - Primitivas 8 – Cliente em Java 9 – Servidor em Java 10 – Servidor Multi-thread 11 – Enviando Objetos 12 – DatagramSocket 13 – Observações 14 – RaceFX 95
  94. 94. Observações Sun Confidential: Internal Only 96
  95. 95. Observações • Muitas coisas podem dar errado na comunicação em rede > Não é possível resolver o nome > O host não pode ser encontrado - offline > A conexão pode ser encerrada abruptamente > O servidor pode demorar demais para responder > Inundação de requisições – quantas threads criar? Sun Confidential: Internal Only 97
  96. 96. Observações • Fique atento! > Trate as exceções > Defina um timeout com o objeto socket: – Socket s = new Socket(“www.google.com”,80); – s.setSoTimeout(60000); //às próximas requisições serão aplicadas um timeout Footnote position, 12 pts. Sun Confidential: Internal Only 98
  97. 97. Como eu faria para meu servidor executar então alguma operação como uma requisição do cliente? • Vocês observaram o comando “Tchau” ? • Lembram do “protocolo”? > Você define as regras para interpretar os dados na sua aplicação! Sun Confidential: Internal Only 99
  98. 98. Agenda 1 – Motivação 2 – Definição 3 – Protocolos 4 – Modelo Cliente-Servidor 5 – Formas de Comunicação 6 – Estados de um Socket 7 – API Socket - Primitivas 8 – Cliente em Java 9 – Servidor em Java 10 – Servidor Multi-thread 11 – Enviando Objetos 12 – DatagramSocket 13 – Observações 14 – RaceFX 100
  99. 99. RaceFX Sun Confidential: Internal Only 101
  100. 100. RaceFX • Jogo desenvolvidor em JavaFX por Raphael Marques (raphaelmarques.wordpress.com/) • Utiliza Sockets para a comunicação entre duas máquinas Footnote position, 12 pts. Sun Confidential: Internal Only 102
  101. 101. Hora de Programar!!! Sun Confidential: Internal Only 103
  102. 102. RaceFX – Trabalho Final do Mini-Curso • Implementar a comunicação entre o cliente e o servidor > Classes: Server e Client • Objetivo > Criar ServerSocket e Socket ou DatagramSocket > Definir Protocolo > Enviar e Receber Dados Sun Confidential: Internal Only 104
  103. 103. Classe Client.java Sun Confidential: Internal Only 105
  104. 104. Construtor Sun Confidential: Internal Only 106
  105. 105. RaceFX – Trabalho Final do Mini-Curso Sun Confidential: Internal Only 107
  106. 106. Método send(SenderCar) Sun Confidential: Internal Only 108
  107. 107. Classe Server.java Sun Confidential: Internal Only 109
  108. 108. Construtor Sun Confidential: Internal Only 110
  109. 109. Sun Confidential: Internal Only 111
  110. 110. Método send(SenderCar) Sun Confidential: Internal Only 112
  111. 111. E o que eu tenho que enviar? Sun Confidential: Internal Only 113
  112. 112. Classe SenderCar.java Sun Confidential: Internal Only 114
  113. 113. Sun Confidential: Internal Only 115
  114. 114. Perguntas Footnote position, 12 pts. Sun Confidential: Internal Only 116
  115. 115. Sockets em Java Elenils on Vieira Embaixador de Campus da Sun Universidade Federal da Paraíba blogs.sun.com/elenilsonvieira elenilson.vieira@sun.com 117

×