Implementando comunicao em JAVA via Sockets Alcides Calsavara

  • Slides: 26
Download presentation
Implementando comunicação em JAVA via Sockets Alcides Calsavara - alcides@ppgia. pucpr. br Leonardo R.

Implementando comunicação em JAVA via Sockets Alcides Calsavara - alcides@ppgia. pucpr. br Leonardo R. Nunes - leonardo@sumersoft. com

Sockets ● Utilizado para comunicação entre processos; ● Compreendendo Sockets - diagramas: – sockets.

Sockets ● Utilizado para comunicação entre processos; ● Compreendendo Sockets - diagramas: – sockets. pdf – socketsgeral. pdf

Sockets ● Mecanismo básico de comunicação sobre IP ● Fornece três modos de acesso:

Sockets ● Mecanismo básico de comunicação sobre IP ● Fornece três modos de acesso: – Modo orientado a conexão (connection-oriented): ● – Modo orientado a datagrama (datagram-oriented): ● – Socket, Server. Socket; Datagram. Socket, Multicast. Socket; Acesso a dados IP de baixo nível (raw ip data): ● Socket. Impl

Modo orientado a conexão (connection-oriented) ● Funciona sobre o protocolo TCP/IP ● Serviços confiáveis:

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;

Ações para implementar um socket cliente 1 - Abrir a conexão: import java. io.

Ações para implementar um socket cliente 1 - Abrir a conexão: import java. io. * ; // streams import java. net. * ; // sockets Socket client. Socket = new Socket (“www. javasoft. com”, 80);

Ações para implementar um socket cliente 2 - Pegando os streams de entrada e

Ações para implementar um socket cliente 2 - Pegando os streams de entrada e saída: Data. Input. Stream inbound = new Data. Input. Stream ( client. Socket. get. Input. Stream( ) ); Data. Output. Stream outbound = new Data. Output. Stream ( client. Socket. get. Output. Stream( ) );

Ações para implementar um socket cliente 3 - Utilizando os streams de entrada e

Ações para implementar um socket cliente 3 - Utilizando os streams de entrada e saída: outbound. write. Int( 3 ); outbound. write. UTF( “Hello” ); int k = inbound. read. Int( ); String s = inbound. read. UTF() ;

Ações para implementar um socket cliente 4 – Fechando os streams de entrada e

Ações para implementar um socket cliente 4 – Fechando os streams de entrada e saída: inbound. close () ; outbound. close () ; 5 – Fechando o socket: client. Socket. close() ;

Ações para implementar um socket servidor 1 - Criar o server socket: Server. Socket

Ações para implementar um socket servidor 1 - Criar o server socket: Server. Socket server. Socket = new Server. Socket (80, 5); 2 - Aguardar conexoes de clientes: Socket client. Socket = server. Socket. accept ();

Ações para implementar um socket servidor 3 - Criar streams de entrada e saída

Ações para implementar um socket servidor 3 - Criar streams de entrada e saída do cliente: Data. Input. Stream inbound = new Data. Input. Stream ( client. Socket. get. Input. Stream( ) ) ; Data. Output. Stream outbound = new Data. Output. Stream ( client. Socket. get. Output. Stream( ) ) ;

Ações para implementar um socket servidor 4 - Conversando com o cliente: int k

Ações para implementar um socket servidor 4 - Conversando com o cliente: int k = inbound. read. Int( ); String s = inbound. read. UTF() ; outbound. write. Int( 3 ); outbound. write. UTF( “Hello” );

Ações para implementar um socket servidor 5 - Fechando streams e socket cliente: inbound.

Ações para implementar um socket servidor 5 - Fechando streams e socket cliente: inbound. close () ; outbound. close () ; client. Socket. close() ; 6 - Fechando o socket servidor: server. Socket. close() ;

Modo orientado a conexão - features ● ● Possibilidade de sockets unidirecional: – socket.

Modo orientado a conexão - features ● ● Possibilidade de sockets unidirecional: – socket. shutdown. Input(); – socket. shutdown. Output(); Implementações de alto nível para protocolos como http, etc. . .

Modo orientado a datagrama (datagram-oriented) ● Funciona sobre o protocolo UDP/IP ● Serviços não

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;

Utilizando datagramas (sender side) 1 - Criação do socket cliente: // sender socket doesn’t

Utilizando datagramas (sender side) 1 - Criação do socket cliente: // sender socket doesn’t need // a special port number Datagram. Socket client. Socket = new Datagram. Socket () ;

Utilizando datagramas (sender side) 2 - Criando e enviando o datagrama: Inet. Address addr=Inet.

Utilizando datagramas (sender side) 2 - Criando e enviando o datagrama: Inet. Address addr=Inet. Address. get. By. Name (“www. javasoft. com”) ; String to. Send = “That’s my question!” ; byte[] buffer = to. Send. get. Bytes() ; // datagram to receiver’s port 4545 Datagram. Packet question = new Datagram. Packet (buffer, buffer. length, addr, 4545) ; client. Socket. send (question) ;

Utilizando datagramas (sender side) 3 - Recebendo e abrindo uma resposta: Datagram. Packet answer

Utilizando datagramas (sender side) 3 - Recebendo e abrindo uma resposta: Datagram. Packet answer = new Datagram. Packet (new byte[512], 512); client. Socket. receive (answer) ; System. out. println (answer. get. Data() + “n” + answer. get. Length() + “n” + answer. get. Address() + “n” + answer. get. Port() ) ;

Utilizando datagramas (sender side) 4 - Fechando o socket client. Socket. close() ;

Utilizando datagramas (sender side) 4 - Fechando o socket client. Socket. close() ;

Utilizando datagramas (receiver side) 1 - Criando um socket servidor: // listens on port

Utilizando datagramas (receiver side) 1 - Criando um socket servidor: // listens on port 4545 Datagram. Socket server. Socket = new Datagram. Socket (4545) ;

Utilizando datagramas (receiver side) 2 - Recebendo um datagrama: Datagram. Packet question = new

Utilizando datagramas (receiver side) 2 - Recebendo um datagrama: Datagram. Packet question = new Datagram. Packet (new byte[512], 512) ; server. Socket. receive (question) ;

Utilizando datagramas (receiver side) 3 - Enviando o datagrama resposta: String to. Send =

Utilizando datagramas (receiver side) 3 - Enviando o datagrama resposta: String to. Send = “That’s the answer !” ; byte[] buffer = to. Send. get. Bytes() ; Datagram. Packet answer = new Datagram. Packet (buffer, buffer. length, question. get. Address()/*sender info*/, question. get. Port()/*sender info*/); server. Socket. send (answer) ;

Utilizando datagramas (receiver side) 4 - Fechando o socket servidor: server. Socket. close() ;

Utilizando datagramas (receiver side) 4 - Fechando o socket servidor: server. Socket. close() ;

Modo orientado a datagama – Multicast ● Um grupo “Multicast” é especificado por um

Modo orientado a datagama – Multicast ● Um grupo “Multicast” é especificado por um endereço IP de classe “D” (224. 0. 0. 0 até 239. 255, inclusive) e uma porta UDP. ● O endereço 224. 0. 0. 0 é reservado e não deve ser usado. ● Multicast. Socket: Inet. Address group = Inet. Address. get. By. Name("228. 5. 6. 7"); Multicast. Socket s = new Multicast. Socket(6789); s. join. Group(group); // Envia e recebe mensagens. s. leave. Group(group);

Sockets sobre IP - TCP e UDP ● Algumas configurações: – Timeout do Sistema

Sockets sobre IP - TCP e UDP ● Algumas configurações: – Timeout do Sistema Operacional; – Utilização de buffers; – Keep. Alive; – etc. . .

Acesso a dados IP de baixo nível ● Java possibilita acesso a algumas configurações

Acesso a dados IP de baixo nível ● Java possibilita acesso a algumas configurações ip, mas não permite raw sockets. – – – Socket. Impl. Factory Socket. Impl Socket. Options

Principais novidades do J 2 SE v 1. 4 ● Suporte à IPv 6

Principais novidades do J 2 SE v 1. 4 ● Suporte à IPv 6 ● Socket. Channel – 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/enhancements 14. html