Implementando comunica - PowerPoint PPT Presentation

1 / 26
About This Presentation
Title:

Implementando comunica

Description:

Implementando comunica o em JAVA via Sockets Alcides Calsavara - alcides_at_ppgia.pucpr.br Leonardo R. Nunes - leonardo_at_sumersoft.com Sockets Utilizado para ... – PowerPoint PPT presentation

Number of Views:51
Avg rating:3.0/5.0
Slides: 27
Provided by: puc99
Category:

less

Transcript and Presenter's Notes

Title: Implementando comunica


1
Implementando comunicação em JAVA via Sockets
  • Alcides Calsavara - alcides_at_ppgia.pucpr.br
  • Leonardo R. Nunes - leonardo_at_sumersoft.com

2
Sockets
  • Utilizado para comunicação entre processos
  • Compreendendo Sockets - diagramas
  • sockets.pdf
  • socketsgeral.pdf

3
Sockets
  • Mecanismo básico de comunicação sobre IP
  • Fornece três modos de acesso
  • Modo orientado a conexão (connection-oriented)
  • Socket, ServerSocket
  • Modo orientado a datagrama (datagram-oriented)
  • DatagramSocket, MulticastSocket
  • Acesso a dados IP de baixo nível (raw ip data)
  • SocketImpl

4
Modo orientado a conexão (connection-oriented)
  • Funciona sobre o protocolo TCP/IP
  • Serviços confiáveis
  • Sem perdas de dados na rede
  • Garantia de ordem dos pacotes
  • Data streams podem ser utilizados
  • Desvantagens
  • É mais lento que o modo orientado a datagrama
  • Comportamento servidor diferente do comportamento
    cliente

5
Ações para implementar um socket cliente
  • 1 - Abrir a conexão
  • import java.io. // streams
  • import java.net. // sockets
  • Socket clientSocket new Socket
  • (www.javasoft.com, 80)

6
Ações para implementar um socket cliente
  • 2 - Pegando os streams de entrada e saída
  • DataInputStream inbound new DataInputStream
  • ( clientSocket.getInputStream( ) )
  • DataOutputStream outbound new DataOutputStream
  • ( clientSocket.getOutputStream( ) )

7
Ações para implementar um socket cliente
  • 3 - Utilizando os streams de entrada e saída
  • outbound.writeInt( 3 )
  • outbound.writeUTF( Hello )
  • int k inbound.readInt( )
  • String s inbound.readUTF()

8
Ações para implementar um socket cliente
  • 4 Fechando os streams de entrada e saída
  • inbound.close ()
  • outbound.close ()
  • 5 Fechando o socket
  • clientSocket.close()

9
Ações para implementar um socket servidor
  • 1 - Criar o server socket
  • ServerSocket serverSocket
  • new ServerSocket (80, 5)
  • 2 - Aguardar conexoes de clientes
  • Socket clientSocket
  • serverSocket.accept ()

10
Ações para implementar um socket servidor
  • 3 - Criar streams de entrada e saída do cliente
  • DataInputStream inbound new DataInputStream
  • ( clientSocket.getInputStream( ) )
  • DataOutputStream outbound new DataOutputStream
  • ( clientSocket.getOutputStream( ) )

11
Ações para implementar um socket servidor
  • 4 - Conversando com o cliente
  • int k inbound.readInt( )
  • String s inbound.readUTF()
  • outbound.writeInt( 3 )
  • outbound.writeUTF( Hello )

12
Ações para implementar um socket servidor
  • 5 - Fechando streams e socket cliente
  • inbound.close ()
  • outbound.close ()
  • clientSocket.close()
  • 6 - Fechando o socket servidor
  • serverSocket.close()

13
Modo orientado a conexão - features
  • Possibilidade de sockets unidirecional
  • socket.shutdownInput()
  • socket.shutdownOutput()
  • Implementações de alto nível para protocolos como
    http, etc...

14
Modo orientado a datagrama (datagram-oriented)
  • Funciona sobre o protocolo UDP/IP
  • Serviços não confiáveis
  • Mensagens podem ser perdidas
  • Ordem das mensagens não garantida
  • Cada mensagem é um datagrama
  • sender, receiver, contents
  • Vantagem
  • É muito mais rápido que o modo orientado a
    conexão

15
Utilizando datagramas (sender side)
  • 1 - Criação do socket cliente
  • // sender socket doesnt need
  • // a special port number
  • DatagramSocket clientSocket
  • new DatagramSocket ()

16
Utilizando datagramas (sender side)
  • 2 - Criando e enviando o datagrama
  • InetAddress addrInetAddress.getByName
  • (www.javasoft.com)
  • String toSend Thats my question!
  • byte buffer toSend.getBytes()
  • // datagram to receivers port 4545
  • DatagramPacket question new DatagramPacket
    (buffer, buffer.length, addr, 4545)
  • clientSocket.send (question)

17
Utilizando datagramas (sender side)
  • 3 - Recebendo e abrindo uma resposta
  • DatagramPacket answer new
  • DatagramPacket (new byte512, 512)
  • clientSocket.receive (answer)
  • System.out.println (answer.getData()
  • \n answer.getLength()
  • \n answer.getAddress()
  • \n answer.getPort() )

18
Utilizando datagramas (sender side)
  • 4 - Fechando o socket
  • clientSocket.close()

19
Utilizando datagramas (receiver side)
  • 1 - Criando um socket servidor
  • // listens on port 4545
  • DatagramSocket serverSocket
  • new DatagramSocket (4545)

20
Utilizando datagramas (receiver side)
  • 2 - Recebendo um datagrama
  • DatagramPacket question new
  • DatagramPacket (new byte512, 512)
  • serverSocket.receive (question)

21
Utilizando datagramas (receiver side)
  • 3 - Enviando o datagrama resposta
  • String toSend Thats the answer !
  • byte buffer toSend.getBytes()
  • DatagramPacket answer new
  • DatagramPacket (buffer, buffer.length,
  • question.getAddress()/sender info/,
  • question.getPort()/sender info/)
  • serverSocket.send (answer)

22
Utilizando datagramas (receiver side)
  • 4 - Fechando o socket servidor
  • serverSocket.close()

23
Modo orientado a datagama Multicast
  • Um grupo Multicast é especificado por um
    endereço IP de classe D (224.0.0.0 até
    239.255.255.255, inclusive) e uma porta UDP.
  • O endereço 224.0.0.0 é reservado e não deve ser
    usado.
  • MulticastSocket
  • InetAddress group InetAddress.getByName("228.5.
    6.7")
  • MulticastSocket s new MulticastSocket(6789)
  • s.joinGroup(group)
  • // Envia e recebe mensagens.
  • s.leaveGroup(group)

24
Sockets sobre IP - TCP e UDP
  • Algumas configurações
  • Timeout do Sistema Operacional
  • Utilização de buffers
  • KeepAlive
  • etc ...

25
Acesso a dados IP de baixo nível
  • Java possibilita acesso a algumas configurações
    ip, mas não permite raw sockets.
  • SocketImplFactory
  • SocketImpl
  • SocketOptions

26
Principais novidades do J2SE v1.4
  • Suporte à IPv6
  • SocketChannel
  • Stream-oriented connecting sockets.
  • Operações assíncronas
  • Maior controle de execução e recursos
    (possibilidade de accept não bloqueante)
  • Suporte a Secure Socket Layer
  • Maiores detalhes
  • JAVA_HOME/docs/guide/net/enhancements14.html
Write a Comment
User Comments (0)
About PowerShow.com