• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Mini-Curso de Sockets no Unipê
 

Mini-Curso de Sockets no Unipê

on

  • 3,414 views

 

Statistics

Views

Total Views
3,414
Views on SlideShare
3,375
Embed Views
39

Actions

Likes
3
Downloads
177
Comments
0

7 Embeds 39

http://blogs.oracle.com 11
https://blogs.oracle.com 9
http://blogs.sun.com 7
http://www.slideshare.net 4
http://www.f2suporte.com 4
http://planets.sun.com 2
http://www.base10.net.br 2
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Mini-Curso de Sockets no Unipê Mini-Curso de Sockets no Unipê Presentation Transcript

    • 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