SlideShare uma empresa Scribd logo
1 de 117
Baixar para ler offline
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
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
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 inter-processos
  •   A interface socket tornou-se quase tão popular
      entre os programadores quanto a própria Internet.




                         Sun Confidential: Internal Only   7
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
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 é representado por um par
  (endereço_ip,porta)




                    Sun Confidential: Internal Only   11
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
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
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
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, protocolos são funções que
  implementam serviços de comunicação




                     Sun Confidential: Internal Only   17
oi

envie os dados
   soma 2 2

         4

   Multi 2 4

          8

     tchau

     Sun Confidential: Internal Only   18
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
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
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 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
Modelo Cliente-Servidor
• Interação
     > paradigma requisição-resposta




Footnote position, 12 pts.

                             Sun Confidential: Internal Only   24
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 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
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 enviar ou receber dados
• Exemplos desse tipo de comunicação:
     > Socket UDP




Footnote position, 12 pts.

                             Sun Confidential: Internal Only   29
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




                    Sun Confidential: Internal Only   31
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 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
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  established
       > Obs. O socket TCP também possui outros estados




Footnote position, 12 pts.

                             Sun Confidential: Internal Only   37
Estados de um Socket
• Socket Ativo: Inicia uma conexão
     > Usado pelos Clientes
     > Closed  Established




Footnote position, 12 pts.

                             Sun Confidential: Internal Only   38
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
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 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
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
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
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
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( )                      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
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
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
Cliente
                                                               em Java




Footnote position, 12 pts.

                             Sun Confidential: Internal Only             51
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 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
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 é 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
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 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
Servidor Multithread
       Sun Confidential: Internal Only   64
Relembrando Criação de Threads
 • Implementando a Classe Runnable




Footnote position, 12 pts.

                             Sun Confidential: Internal Only   65
Relembrando Criação de Threads
 • Extendendo a Classe Thread




Footnote position, 12 pts.

                             Sun Confidential: Internal Only   66
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
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 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
Enviando Objetos
• Utilizamos as classes
  > ObjectOutputStream
     – writeObject(objeto)
  > ObjectInputStream
     – readObject()


• O objeto precisa implemente Serializable




                             Sun Confidential: Internal Only   78
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 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
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
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
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
No Servidor




              Sun Confidential: Internal Only   88
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
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 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
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 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
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
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
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
RaceFX
Sun Confidential: Internal Only            101
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
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 Client
• Objetivo
  > Criar ServerSocket e Socket ou DatagramSocket
  > Definir Protocolo
  > Enviar e Receber Dados




                        Sun Confidential: Internal Only   104
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/elenilsonvieira
elenilson.vieira@sun.com
                                  117

Mais conteúdo relacionado

Semelhante a Mini-Curso de Sockets no Unipê

Semelhante a Mini-Curso de Sockets no Unipê (20)

Minicurso Node-RED.pdf
Minicurso Node-RED.pdfMinicurso Node-RED.pdf
Minicurso Node-RED.pdf
 
Sockets java
Sockets javaSockets java
Sockets java
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017
 
10. camada de rede
10. camada de rede10. camada de rede
10. camada de rede
 
Skype
SkypeSkype
Skype
 
prot.ppt
prot.pptprot.ppt
prot.ppt
 
Descobrindo os limites de um Sip Proxy
Descobrindo os limites de um Sip ProxyDescobrindo os limites de um Sip Proxy
Descobrindo os limites de um Sip Proxy
 
SNMP - Rafael Rodriques
SNMP - Rafael RodriquesSNMP - Rafael Rodriques
SNMP - Rafael Rodriques
 
Sistemas Distribuídos - Comunicação Distribuída – RPC
Sistemas Distribuídos - Comunicação Distribuída – RPCSistemas Distribuídos - Comunicação Distribuída – RPC
Sistemas Distribuídos - Comunicação Distribuída – RPC
 
Lab 06 ping_com_udp
Lab 06 ping_com_udpLab 06 ping_com_udp
Lab 06 ping_com_udp
 
Web Services
Web ServicesWeb Services
Web Services
 
Camada rede
Camada redeCamada rede
Camada rede
 
Datacenter na nuvem
Datacenter na nuvemDatacenter na nuvem
Datacenter na nuvem
 
TCP Assíncrono usando C++11 e Boost Asio
TCP Assíncrono usando C++11 e Boost AsioTCP Assíncrono usando C++11 e Boost Asio
TCP Assíncrono usando C++11 e Boost Asio
 
Camada de aplicação parte1
Camada de aplicação parte1Camada de aplicação parte1
Camada de aplicação parte1
 
Aula 5 semana
Aula 5 semanaAula 5 semana
Aula 5 semana
 
Disciplina_Redes e Segurança de Sistemas - Mapeamento de Redes
Disciplina_Redes e Segurança de Sistemas - Mapeamento de RedesDisciplina_Redes e Segurança de Sistemas - Mapeamento de Redes
Disciplina_Redes e Segurança de Sistemas - Mapeamento de Redes
 
Curso redes seed
Curso redes seedCurso redes seed
Curso redes seed
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Economize o Consumo de Link WAN com o BranchCache
Economize o Consumo de Link WAN com o BranchCacheEconomize o Consumo de Link WAN com o BranchCache
Economize o Consumo de Link WAN com o BranchCache
 

Mais de Elenilson Vieira (20)

Aulão de JPA com Tomaz Lavieri
Aulão de JPA com Tomaz LavieriAulão de JPA com Tomaz Lavieri
Aulão de JPA com Tomaz Lavieri
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
 
JavaEE
JavaEEJavaEE
JavaEE
 
JavaME no Mercado Mobile
JavaME no Mercado MobileJavaME no Mercado Mobile
JavaME no Mercado Mobile
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
 
Apresentação da Doom
Apresentação da DoomApresentação da Doom
Apresentação da Doom
 
Palestra sobre a Sun
Palestra sobre a SunPalestra sobre a Sun
Palestra sobre a Sun
 
Apresentação da RedeSoft
Apresentação da RedeSoftApresentação da RedeSoft
Apresentação da RedeSoft
 
Java Collections - Tomaz Lavieri
Java Collections - Tomaz LavieriJava Collections - Tomaz Lavieri
Java Collections - Tomaz Lavieri
 
A Sun no Meio Acadêmico - IESP/FatecPB
A Sun no Meio Acadêmico - IESP/FatecPBA Sun no Meio Acadêmico - IESP/FatecPB
A Sun no Meio Acadêmico - IESP/FatecPB
 
JavaME
JavaMEJavaME
JavaME
 
Concorrência com Java
Concorrência com JavaConcorrência com Java
Concorrência com Java
 
Programas Acadêmicos da Sun no Unipê
Programas Acadêmicos da Sun no UnipêProgramas Acadêmicos da Sun no Unipê
Programas Acadêmicos da Sun no Unipê
 
Mundo Livre e Aberto
Mundo Livre e AbertoMundo Livre e Aberto
Mundo Livre e Aberto
 
JavaME - Aula 2
JavaME - Aula 2JavaME - Aula 2
JavaME - Aula 2
 
JavaME - Aula 1
JavaME - Aula 1JavaME - Aula 1
JavaME - Aula 1
 
Apostila JavaME
Apostila JavaMEApostila JavaME
Apostila JavaME
 
Threads
ThreadsThreads
Threads
 
Sincronização - Glêdson Elias
Sincronização - Glêdson EliasSincronização - Glêdson Elias
Sincronização - Glêdson Elias
 
Collections e Generics
Collections e GenericsCollections e Generics
Collections e Generics
 

Mini-Curso de Sockets no Unipê

  • 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
  • 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. Footnote position, 12 pts. Sun Confidential: Internal Only 4
  • 5. Quem conhece Programação Distribuída? Sun Confidential: Internal Only 5
  • 6. Footnote position, 12 pts. Sun Confidential: Internal Only 6
  • 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. 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. Definição Sun Confidential: Internal Only 9
  • 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. 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. 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. 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. Protocolos Sun Confidential: Internal Only 15
  • 16. O que é um Protocolo? Sun Confidential: Internal Only 16
  • 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. oi envie os dados soma 2 2 4 Multi 2 4 8 tchau Sun Confidential: Internal Only 18
  • 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. 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. Modelo Cliente-Servidor Sun Confidential: Internal Only 21
  • 22. O que é o Modelo Cliente-Servidor? Sun Confidential: Internal Only 22
  • 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. Modelo Cliente-Servidor • Interação > paradigma requisição-resposta Footnote position, 12 pts. Sun Confidential: Internal Only 24
  • 25. Modelo Cliente-Servidor Footnote position, 12 pts. Sun Confidential: Internal Only 25
  • 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. Formas de Comunicação Footnote position, 12 pts. Sun Confidential: Internal Only 27
  • 28. Dois tipos de comunicação • Com conexão • Sem conexão Sun Confidential: Internal Only 28
  • 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. Sem Conexão Sun Confidential: Internal Only 30
  • 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. Com Conexão Sun Confidential: Internal Only 32
  • 34. Com Conexão Sun Confidential: Internal Only 34
  • 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. Estados de um Socket Footnote position, 12 pts. Sun Confidential: Internal Only 36
  • 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. 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. 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. API Sockets - Primitivas Footnote position, 12 pts. Sun Confidential: Internal Only 40
  • 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. 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. 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. 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. Hora de Programar!!! Sun Confidential: Internal Only 45
  • 46. Interagir com Socket de Java Sun Confidential: Internal Only 46
  • 47. Interagir com Socket de Java Sun Confidential: Internal Only 47
  • 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. 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. 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. Cliente em Java Footnote position, 12 pts. Sun Confidential: Internal Only 51
  • 52. Cliente em Java Sun Confidential: Internal Only 52
  • 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. Servidor em Java Sun Confidential: Internal Only 54
  • 55. Servidor em Java Sun Confidential: Internal Only 55
  • 56. Hora de Programar!!! Sun Confidential: Internal Only 56
  • 57. Implementar uma calculadora utilizando Sockets Sun Confidential: Internal Only 57
  • 58.
  • 59.
  • 60. Hora de Programar!!! Sun Confidential: Internal Only 60
  • 61. • 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
  • 62. Servidor Monothread Sun Confidential: Internal Only 62
  • 63. 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
  • 64. Servidor Multithread Sun Confidential: Internal Only 64
  • 65. Relembrando Criação de Threads • Implementando a Classe Runnable Footnote position, 12 pts. Sun Confidential: Internal Only 65
  • 66. Relembrando Criação de Threads • Extendendo a Classe Thread Footnote position, 12 pts. Sun Confidential: Internal Only 66
  • 67. 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
  • 68. Servidor Multithread Sun Confidential: Internal Only 68
  • 69. Servidor Multithread Sun Confidential: Internal Only 69
  • 70. Falamos de servidor multithreaded, mas e quanto ao cliente? Sun Confidential: Internal Only 70
  • 71. Servidor Multithread Sun Confidential: Internal Only 71
  • 72. Hora de Programar!!! Sun Confidential: Internal Only 72
  • 73. Implementar o servidor Multithread Sun Confidential: Internal Only 73
  • 74. Como ficaria a calculadora MultiThread? Sun Confidential: Internal Only 74
  • 75. Hora de Programar!!! Sun Confidential: Internal Only 75
  • 76. Implementar a calculadora Multithread Sun Confidential: Internal Only 76
  • 77. 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
  • 78. Enviando Objetos • Utilizamos as classes > ObjectOutputStream – writeObject(objeto) > ObjectInputStream – readObject() • O objeto precisa implemente Serializable Sun Confidential: Internal Only 78
  • 82. Hora de Programar!!! Sun Confidential: Internal Only 82
  • 83. Implementar o envio de Objetos Sun Confidential: Internal Only 83
  • 84. 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
  • 85. 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
  • 86. 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
  • 87. 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
  • 88. No Servidor Sun Confidential: Internal Only 88
  • 89. 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
  • 90. No Cliente Sun Confidential: Internal Only 90
  • 91. No Cliente Sun Confidential: Internal Only 91
  • 92. No Cliente Sun Confidential: Internal Only 92
  • 93. Hora de Programar!!! Sun Confidential: Internal Only 93
  • 94. Implementar o envio de dados com DatagramSocket Sun Confidential: Internal Only 94
  • 95. 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
  • 96. Observações Sun Confidential: Internal Only 96
  • 97. 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
  • 98. 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
  • 99. 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
  • 100. 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
  • 102. 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
  • 103. Hora de Programar!!! Sun Confidential: Internal Only 103
  • 104. 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
  • 105. Classe Client.java Sun Confidential: Internal Only 105
  • 106. Construtor Sun Confidential: Internal Only 106
  • 107. RaceFX – Trabalho Final do Mini-Curso Sun Confidential: Internal Only 107
  • 108. Método send(SenderCar) Sun Confidential: Internal Only 108
  • 109. Classe Server.java Sun Confidential: Internal Only 109
  • 110. Construtor Sun Confidential: Internal Only 110
  • 112. Método send(SenderCar) Sun Confidential: Internal Only 112
  • 113. E o que eu tenho que enviar? Sun Confidential: Internal Only 113
  • 114. Classe SenderCar.java Sun Confidential: Internal Only 114
  • 116. Perguntas Footnote position, 12 pts. Sun Confidential: Internal Only 116
  • 117. 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