Your SlideShare is downloading. ×
0
Implementando comunicação em JAVA via Sockets Alcides Calsavara - alcides@ppgia.pucpr.br Leonardo R. Nunes - leonardo@sume...
Sockets <ul><li>Utilizado para comunicação entre processos; </li></ul><ul><li>Compreendendo Sockets - diagramas: </li></ul...
Sockets <ul><li>Mecanismo básico de comunicação sobre IP </li></ul><ul><li>Fornece três modos de acesso: </li></ul><ul><ul...
Modo orientado a conexão (connection-oriented) <ul><li>Funciona sobre o protocolo TCP/IP </li></ul><ul><li>Serviços confiá...
Ações para implementar um  socket cliente <ul><li>1 - Abrir a conexão: </li></ul><ul><ul><li>import java.io.* ;  // stream...
Ações para implementar um  socket cliente <ul><li>2 - Pegando os streams de entrada e saída: </li></ul><ul><li>DataInputSt...
Ações para implementar um  socket cliente <ul><li>3 - Utilizando os streams de entrada e saída: </li></ul><ul><ul><li>outb...
Ações para implementar um  socket cliente <ul><li>4 – Fechando os streams de entrada e saída: </li></ul><ul><ul><li>inboun...
Ações para implementar um  socket servidor <ul><li>1 - Criar o server socket: </li></ul><ul><ul><li>ServerSocket  serverSo...
Ações para implementar um  socket servidor <ul><li>3 - Criar streams de entrada e saída do cliente: </li></ul><ul><li>Data...
Ações para implementar um  socket servidor <ul><li>4 - Conversando com o cliente: </li></ul><ul><ul><li>int k =    inbound...
Ações para implementar um  socket servidor <ul><li>5 - Fechando streams e socket cliente: </li></ul><ul><ul><li>inbound .c...
Modo orientado a conexão - features <ul><li>Possibilidade de sockets unidirecional: </li></ul><ul><ul><li>socket.shutdownI...
Modo orientado a datagrama (datagram-oriented) <ul><li>Funciona sobre o protocolo UDP/IP </li></ul><ul><li>Serviços não co...
Utilizando datagramas (sender side) <ul><li>1 - Criação do socket cliente: </li></ul><ul><ul><li>// sender socket doesn’t ...
Utilizando datagramas (sender side) <ul><li>2 - Criando e enviando o datagrama: </li></ul><ul><ul><li>InetAddress addr=Ine...
Utilizando datagramas (sender side) <ul><li>3 - Recebendo e abrindo uma resposta: </li></ul><ul><ul><li>DatagramPacket  an...
Utilizando datagramas (sender side) <ul><li>4 - Fechando  o socket </li></ul><ul><ul><li>clientSocket .close() ; </li></ul...
Utilizando datagramas (receiver side) <ul><li>1 - Criando um socket servidor: </li></ul><ul><ul><li>// listens on port 454...
Utilizando datagramas (receiver side) <ul><li>2 - Recebendo um datagrama: </li></ul><ul><ul><li>DatagramPacket  question  ...
Utilizando datagramas (receiver side) <ul><li>3 - Enviando o datagrama resposta: </li></ul><ul><ul><li>String toSend = “ T...
Utilizando datagramas (receiver side) <ul><li>4 - Fechando o socket servidor: </li></ul><ul><ul><li>serverSocket .close() ...
Modo orientado a datagama – Multicast <ul><li>Um grupo “Multicast” é especificado por um endereço IP de classe “D” (224.0....
Sockets sobre IP - TCP e UDP <ul><li>Algumas configurações: </li></ul><ul><ul><li>Timeout do Sistema Operacional; </li></u...
Acesso a dados IP de baixo nível <ul><li>Java possibilita acesso a algumas configurações ip, mas não permite raw sockets. ...
Principais novidades do J2SE v1.4 <ul><li>Suporte à IPv6 </li></ul><ul><li>SocketChannel </li></ul><ul><ul><li>Stream-orie...
Upcoming SlideShare
Loading in...5
×

Sockets java

1,030

Published on

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

  • Be the first to like this

No Downloads
Views
Total Views
1,030
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
43
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Sockets java"

  1. 1. Implementando comunicação em JAVA via Sockets Alcides Calsavara - alcides@ppgia.pucpr.br Leonardo R. Nunes - leonardo@sumersoft.com
  2. 2. Sockets <ul><li>Utilizado para comunicação entre processos; </li></ul><ul><li>Compreendendo Sockets - diagramas: </li></ul><ul><ul><li>sockets.pdf </li></ul></ul><ul><ul><li>socketsgeral.pdf </li></ul></ul>
  3. 3. Sockets <ul><li>Mecanismo básico de comunicação sobre IP </li></ul><ul><li>Fornece três modos de acesso: </li></ul><ul><ul><li>Modo orientado a conexão (connection-oriented): </li></ul></ul><ul><ul><ul><li>Socket, ServerSocket; </li></ul></ul></ul><ul><ul><li>Modo orientado a datagrama (datagram-oriented): </li></ul></ul><ul><ul><ul><li>DatagramSocket, MulticastSocket; </li></ul></ul></ul><ul><ul><li>Acesso a dados IP de baixo nível (raw ip data): </li></ul></ul><ul><ul><ul><li>SocketImpl </li></ul></ul></ul>
  4. 4. Modo orientado a conexão (connection-oriented) <ul><li>Funciona sobre o protocolo TCP/IP </li></ul><ul><li>Serviços confiáveis: </li></ul><ul><ul><li>Sem perdas de dados na rede; </li></ul></ul><ul><ul><li>Garantia de ordem dos pacotes; </li></ul></ul><ul><li>“ Data streams” podem ser utilizados </li></ul><ul><li>Desvantagens: </li></ul><ul><ul><li>É mais lento que o modo orientado a datagrama; </li></ul></ul><ul><ul><li>Comportamento servidor diferente do comportamento cliente; </li></ul></ul>
  5. 5. Ações para implementar um socket cliente <ul><li>1 - Abrir a conexão: </li></ul><ul><ul><li>import java.io.* ; // streams </li></ul></ul><ul><ul><li>import java.net.* ; // sockets </li></ul></ul><ul><ul><li>Socket clientSocket = new Socket </li></ul></ul><ul><ul><ul><li>(“www.javasoft.com”, 80); </li></ul></ul></ul>
  6. 6. Ações para implementar um socket cliente <ul><li>2 - Pegando os streams de entrada e saída: </li></ul><ul><li>DataInputStream inbound = new DataInputStream </li></ul><ul><li>( clientSocket .getInputStream( ) ); </li></ul><ul><li>DataOutputStream outbound = new DataOutputStream </li></ul><ul><li>( clientSocket .getOutputStream( ) ); </li></ul>
  7. 7. Ações para implementar um socket cliente <ul><li>3 - Utilizando os streams de entrada e saída: </li></ul><ul><ul><li>outbound .writeInt( 3 ); </li></ul></ul><ul><ul><li>outbound .writeUTF( “Hello” ); </li></ul></ul><ul><ul><li>int k = inbound .readInt( ); </li></ul></ul><ul><ul><li>String s = inbound .readUTF() ; </li></ul></ul>
  8. 8. Ações para implementar um socket cliente <ul><li>4 – Fechando os streams de entrada e saída: </li></ul><ul><ul><li>inbound .close () ; </li></ul></ul><ul><ul><li>outbound .close () ; </li></ul></ul><ul><li>5 – Fechando o socket: </li></ul><ul><ul><li>clientSocket .close() ; </li></ul></ul>
  9. 9. Ações para implementar um socket servidor <ul><li>1 - Criar o server socket: </li></ul><ul><ul><li>ServerSocket serverSocket = </li></ul></ul><ul><ul><li>new ServerSocket (80, 5); </li></ul></ul><ul><li>2 - Aguardar conexoes de clientes: </li></ul><ul><ul><li>Socket clientSocket = </li></ul></ul><ul><ul><li>serverSocket .accept (); </li></ul></ul>
  10. 10. Ações para implementar um socket servidor <ul><li>3 - Criar streams de entrada e saída do cliente: </li></ul><ul><li>DataInputStream inbound = new DataInputStream </li></ul><ul><li>( clientSocket .getInputStream( ) ) ; </li></ul><ul><li>DataOutputStream outbound = new DataOutputStream </li></ul><ul><li>( clientSocket .getOutputStream( ) ) ; </li></ul>
  11. 11. Ações para implementar um socket servidor <ul><li>4 - Conversando com o cliente: </li></ul><ul><ul><li>int k = inbound .readInt( ); </li></ul></ul><ul><ul><li>String s = inbound .readUTF() ; </li></ul></ul><ul><ul><li>outbound .writeInt( 3 ); </li></ul></ul><ul><ul><li>outbound .writeUTF( “Hello” ); </li></ul></ul>
  12. 12. Ações para implementar um socket servidor <ul><li>5 - Fechando streams e socket cliente: </li></ul><ul><ul><li>inbound .close () ; </li></ul></ul><ul><ul><li>outbound .close () ; </li></ul></ul><ul><ul><li>clientSocket .close() ; </li></ul></ul><ul><li>6 - Fechando o socket servidor: </li></ul><ul><ul><li>serverSocket .close() ; </li></ul></ul>
  13. 13. Modo orientado a conexão - features <ul><li>Possibilidade de sockets unidirecional: </li></ul><ul><ul><li>socket.shutdownInput(); </li></ul></ul><ul><ul><li>socket.shutdownOutput(); </li></ul></ul><ul><li>Implementações de alto nível para protocolos como http, etc... </li></ul>
  14. 14. Modo orientado a datagrama (datagram-oriented) <ul><li>Funciona sobre o protocolo UDP/IP </li></ul><ul><li>Serviços não confiáveis: </li></ul><ul><ul><li>Mensagens podem ser perdidas; </li></ul></ul><ul><ul><li>Ordem das mensagens não garantida; </li></ul></ul><ul><li>Cada mensagem é um datagrama: </li></ul><ul><ul><li>[sender, receiver, contents] </li></ul></ul><ul><li>Vantagem: </li></ul><ul><ul><li>É muito mais rápido que o modo orientado a conexão; </li></ul></ul>
  15. 15. Utilizando datagramas (sender side) <ul><li>1 - Criação do socket cliente: </li></ul><ul><ul><li>// sender socket doesn’t need </li></ul></ul><ul><ul><li>// a special port number </li></ul></ul><ul><ul><li>DatagramSocket clientSocket = </li></ul></ul><ul><ul><li>new DatagramSocket () ; </li></ul></ul>
  16. 16. Utilizando datagramas (sender side) <ul><li>2 - Criando e enviando o datagrama: </li></ul><ul><ul><li>InetAddress addr=InetAddress.getByName </li></ul></ul><ul><ul><li>(“www.javasoft.com”) ; </li></ul></ul><ul><ul><li>String toSend = “ That’s my question! ” ; </li></ul></ul><ul><ul><li>byte[] buffer = toSend.getBytes() ; </li></ul></ul><ul><ul><li>// datagram to receiver’s port 4545 </li></ul></ul><ul><ul><li>DatagramPacket question = new DatagramPacket (buffer, buffer.length, addr, 4545) ; </li></ul></ul><ul><ul><li>clientSocket .send ( question ) ; </li></ul></ul>
  17. 17. Utilizando datagramas (sender side) <ul><li>3 - Recebendo e abrindo uma resposta: </li></ul><ul><ul><li>DatagramPacket answer = new </li></ul></ul><ul><ul><li>DatagramPacket (new byte[512], 512); </li></ul></ul><ul><ul><li>clientSocket .receive ( answer ) ; </li></ul></ul><ul><ul><li>System.out.println ( answer .getData() </li></ul></ul><ul><ul><li>+ “n” + answer .getLength() </li></ul></ul><ul><ul><li>+ “n” + answer .getAddress() </li></ul></ul><ul><ul><li>+ “n” + answer .getPort() ) ; </li></ul></ul>
  18. 18. Utilizando datagramas (sender side) <ul><li>4 - Fechando o socket </li></ul><ul><ul><li>clientSocket .close() ; </li></ul></ul>
  19. 19. Utilizando datagramas (receiver side) <ul><li>1 - Criando um socket servidor: </li></ul><ul><ul><li>// listens on port 4545 </li></ul></ul><ul><ul><li>DatagramSocket serverSocket = </li></ul></ul><ul><ul><li>new DatagramSocket (4545) ; </li></ul></ul>
  20. 20. Utilizando datagramas (receiver side) <ul><li>2 - Recebendo um datagrama: </li></ul><ul><ul><li>DatagramPacket question = new </li></ul></ul><ul><ul><li>DatagramPacket (new byte[512], 512) ; </li></ul></ul><ul><ul><li>serverSocket .receive ( question ) ; </li></ul></ul>
  21. 21. Utilizando datagramas (receiver side) <ul><li>3 - Enviando o datagrama resposta: </li></ul><ul><ul><li>String toSend = “ That’s the answer ! ” ; </li></ul></ul><ul><ul><li>byte[] buffer = toSend.getBytes() ; </li></ul></ul><ul><ul><li>DatagramPacket answer = new </li></ul></ul><ul><ul><li>DatagramPacket (buffer, buffer.length, </li></ul></ul><ul><ul><li>question .getAddress()/*sender info*/, </li></ul></ul><ul><ul><li>question .getPort()/*sender info*/); </li></ul></ul><ul><ul><li>serverSocket .send ( answer ) ; </li></ul></ul>
  22. 22. Utilizando datagramas (receiver side) <ul><li>4 - Fechando o socket servidor: </li></ul><ul><ul><li>serverSocket .close() ; </li></ul></ul>
  23. 23. Modo orientado a datagama – Multicast <ul><li>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. </li></ul><ul><li>O endereço 224.0.0.0 é reservado e não deve ser usado. </li></ul><ul><li>MulticastSocket: </li></ul><ul><li>InetAddress group = InetAddress.getByName(&quot;228.5.6.7&quot;); </li></ul><ul><li>MulticastSocket s = new MulticastSocket(6789); </li></ul><ul><li>s. joinGroup (group); </li></ul><ul><li>// Envia e recebe mensagens. </li></ul><ul><li>s. leaveGroup (group); </li></ul>
  24. 24. Sockets sobre IP - TCP e UDP <ul><li>Algumas configurações: </li></ul><ul><ul><li>Timeout do Sistema Operacional; </li></ul></ul><ul><ul><li>Utilização de buffers; </li></ul></ul><ul><ul><li>KeepAlive; </li></ul></ul><ul><ul><li>etc ... </li></ul></ul>
  25. 25. Acesso a dados IP de baixo nível <ul><li>Java possibilita acesso a algumas configurações ip, mas não permite raw sockets. </li></ul><ul><ul><li>SocketImplFactory </li></ul></ul><ul><ul><li>SocketImpl </li></ul></ul><ul><ul><li>SocketOptions </li></ul></ul>
  26. 26. Principais novidades do J2SE v1.4 <ul><li>Suporte à IPv6 </li></ul><ul><li>SocketChannel </li></ul><ul><ul><li>Stream-oriented connecting sockets. </li></ul></ul><ul><ul><li>Operações assíncronas </li></ul></ul><ul><ul><li>Maior controle de execução e recursos (possibilidade de accept não bloqueante) </li></ul></ul><ul><li>Suporte a Secure Socket Layer </li></ul><ul><li>Maiores detalhes: </li></ul><ul><ul><li>%JAVA_HOME%/docs/guide/net/enhancements14.html </li></ul></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×