De que se trata o artigo: Este artigo apresenta os conceitos da computação distribuída e nos fornece os passos a serem seguidos para a utilização de sockets na tecnologia Java, tornando possível a implementação de aplicações Java que necessitem se comunicar de forma acoplada, trabalhando em conjunto para a execução de operações a partir da troca de mensagens de diferentes tipos de dados.


Para que serve:
Este artigo foi criado com o objetivo de introduzir os desenvolvedores à tecnologia de sockets, possibilitando incorporar comunicação e troca de informações em aplicações Java de maneira fácil e produtiva. Apesar de ser um artigo introdutório, aborda-se os principais assuntos sobre a implementação de aplicativos em ambientes distribuídos.


Em que situação o tema é útil:
Este artigo será útil para os desenvolvedores que desejam aprender como implementar aplicações Java que, por meio de uma arquitetura distribuída, possam trabalhar de modo cooperativo, dividindo processos e tarefas, trocando informações entre si por meio de mensagens e descentralizando operações.

Resumo DevMan: A tecnologia Java nos fornece mecanismos para o desenvolvimento de aplicações distribuídas, permitindo a criação de aplicativos que se comuniquem e troquem os mais diversos tipos de informações, facilitando a execução de tarefas em diversas máquinas, descentralizando operações e processos.

Para a implementação de ambientes distribuídos, é possível utilizar dois modos de transmissão de dados: baseado em conexões e sem conexões. O primeiro modo (com conexões) é muito utilizado quando se deve estabelecer uma conexão, garantindo a entrega e a ordem das informações transmitidas, enquanto o segundo modo (sem conexões) é mais empregado em aplicativos onde não há a necessidade de garantir a entrega e a sequência dos dados transmitidos.

Utilizando-se classes e interfaces presentes no pacote java.net, desenvolvedores Java possuem as ferramentas necessárias para a implementação de aplicativos que executam processos junto a uma rede de computadores, permitindo a troca de informações por diversos protocolos como TCP e UDP.

Atualmente, a programação em redes de computadores tem se tornado uma regra, deixando de ser apenas uma tecnologia presente em poucos sistemas, mas que vem ganhando espaço nos mais diversos tipos de aplicações. A principal vantagem nesse modelo de programação é a capacidade, física e lógica, de distribuir operações computacionalmente pesadas e grandes quantidades de dados e informações entre diversas máquinas que, trabalhando em conjunto, ocasionam a descentralização de tarefas.

O modelo de programação distribuída, realizada através da separação de aplicações entre servidores (aplicações que fornecem serviços a serem consumidos) e clientes (aplicações que consomem serviços disponibilizados por outras máquinas), foi a principal arquitetura de distribuição nos anos de 1990. Por meio desta arquitetura, houve aumento na confiabilidade e redução de custos. A confiabilidade tornou-se um fator importante nesta arquitetura, pois, mesmo havendo falha durante um processo em uma determinada máquina, o sistema não se inviabilizava como um todo, e com a utilização de máquinas mais simples executando serviços isoladamente, houve uma grande diminuição nos custos para execução de operações por máquinas mais poderosas.

Os aplicativos de servidor e cliente são programas que, executados em diferentes máquinas, trocam informações por meio de redes de computadores. A aplicação cliente é capaz de realizar requisições de serviços que são providos pela aplicação servidora. Para isso, o consumidor (ou cliente) deve conhecer o fornecedor dos serviços (ou servidor) a partir de um endereço além de ter conhecimento sobre o protocolo pré-estabelecido utilizado para realizar a solicitação.

No entanto, pelo fato de haver a necessidade de trocas de mensagens entre as máquinas envolvidas no processo, há um custo e tempo adicional para efetivar essa troca.

Outra característica importante é que os dispositivos envolvidos na troca de mensagens devem utilizar a mesma linguagem ou protocolo. Em uma rede de computadores há diversos protocolos, organizando regras sobre o modo como são realizadas as comunicações entre as partes envolvidas em uma comunicação. Um dos principais conjuntos de protocolos na programação de redes de computadores é estabelecido pela arquitetura TCP/IP, operando por meio de um software oferecido pelo sistema operacional a partir de uma máquina ligada na rede.

A tecnologia Java suporta a troca de bytes entre um cliente e um servidor TCP através do estabelecimento de uma conexão entre eles. Pode-se entender uma conexão como uma ligação direta realizada entre dois processos, na qual dados podem fluir nos dois sentidos.

Para estabelecer uma conexão TCP, as extremidades das máquinas envolvidas nos processos de servidor e cliente devem ser identificadas. As extremidades dessa conexão são denominadas de sockets ou soquetes, identificados por um endereço de rede e um número de porta.

Neste artigo, você irá aprender os conceitos de computação distribuída por meio de sockets utilizando a tecnologia Java, bem como aplicar todo o conhecimento adquirido, facilitando assim o desenvolvimento e comunicação de aplicações cliente-servidor.

O que são sockets?

Socket ou soquete é apenas um conceito ou uma abstração. O termo socket é utilizado para representar um ponto de conexão para uma rede de computadores que utiliza o protocolo TCP/IP. Quando dois computadores necessitam manter uma comunicação, cada um deles utiliza um socket. Um computador, denominado server ou servidor, disponibiliza um socket e aguarda o recebimento de uma solicitação de conexão, enquanto outro computador, denominado client ou cliente, executa um socket para se comunicar à máquina servidora, conforme demonstrado na Figura 1. Para estabelecer uma nova conexão, é necessário apenas um endereço de destino e um número de porta.

Socket de servidor aguardando conexões

Figura 1. Socket de servidor aguardando conexões.

Caso não ocorra nenhum problema, o servidor aceita a conexão gerando um novo socket em uma porta qualquer do seu lado, criando assim um canal de comunicação entre o cliente e o servidor. A Figura 2 demonstra esse canal de comunicação.

Canal de comunicação criado após conexão de cliente ser recebida

Figura 2. Canal de comunicação criado após conexão de cliente ser recebida.

Cada computador em uma rede TCP/IP possui um endereço exclusivo. As portas representam conexões individuais dentro desse endereço, porém os dados transmitidos passam por um processo de roteamento dentro de cada computador a partir de um número da porta. Quando um socket é criado, ele necessita estar associado a uma determinada porta e deve haver apenas um socket associado a essa porta.

A principal característica de uma máquina servidora é a de receber e manipular conexões a partir de solicitações dos clientes, portanto, seu comportamento típico é o de permanecer em loop aguardando novas conexões e criando sockets com a finalidade de atender as requisições dos clientes, conforme demonstrado na Figura 3.

Aplicação cliente-servidor baseada em conexões

Figura 3. Aplicação cliente-servidor baseada em conexões.

Sockets em Java

Assim como todas as outras funcionalidades fornecidas pela tecnologia Java, existe um pacote específico que contém os mecanismos necessários para se trabalhar com sockets: o pacote java.net.

O pacote java.net contém todas as classes necessárias para criar aplicações de rede. As classes ServerSocket e Socket também fazem parte desse pacote e são utilizadas para aplicações que fazem uso do protocolo TCP. Além dessas classes, também existem outras para conexão com servidores web, criação de secure sockets ou sockets seguros, entre outras funcionalidades.

...
Quer ler esse conteúdo completo? Tenha acesso completo