A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Implementando comunicação em JAVA via Sockets Alcides Calsavara - Leonardo R. Nunes -

Apresentações semelhantes


Apresentação em tema: "Implementando comunicação em JAVA via Sockets Alcides Calsavara - Leonardo R. Nunes -"— Transcrição da apresentação:

1 Implementando comunicação em JAVA via Sockets Alcides Calsavara - alcides@ppgia.pucpr.br Leonardo R. Nunes - leonardo@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 doesn’t need // a special port number DatagramSocket clientSocket = new DatagramSocket () ;

16 Utilizando datagramas (sender side) 2 - Criando e enviando o datagrama: InetAddress addr=InetAddress.getByName (“www.javasoft.com”) ; String toSend = “That’s my question!” ; byte[] buffer = toSend.getBytes() ; // datagram to receiver’s 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 byte[512], 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 byte[512], 512) ; serverSocket.receive (question) ;

21 Utilizando datagramas (receiver side) 3 - Enviando o datagrama resposta: String toSend = “That’s 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


Carregar ppt "Implementando comunicação em JAVA via Sockets Alcides Calsavara - Leonardo R. Nunes -"

Apresentações semelhantes


Anúncios Google