Programação distribuída com Sockets

Este artigo aborda conceitos sobre sockets TCP, que realizam a comunicação entre máquinas virtuais através de redes de computadores.

Porque este artigo é útil: Sockets permitem realizar uma comunicação entre computadores, no caso do Java, entre máquinas virtuais remotas. Este assunto está presente na maioria dos sistemas operacionais e pode ser implementado por diversas linguagens de programação, possibilitando ao desenvolvedor a comunicação de aplicações que necessitam transmitir/receber dados e, também, desenvolver serviços de rede como servidores web, FTP, SSH ou qualquer outro baseado em redes TCP/IP.

Este artigo aborda conceitos sobre sockets TCP, os quais permitem realizar a comunicação entre máquinas virtuais através de redes de computadores. Para viabilizar essa comunicação, o pacote java.net oferece classes para envio e recebimento de dados. Inseridas neste contexto, as classes Socket e ServerSocket possibilitam realizar uma conexão cliente-servidor para transmitir dados primitivos e objetos por meio das classes DataInputStream/DataOutputStream e ObjectInputStream/ObjectOutputStream, respectivamente. Por fim, este artigo confere ao leitor conhecimentos básicos de como implementar um servidor que aceite múltiplas conexões de clientes.

Um servidor pode ser visto como um computador dedicado a oferecer serviços para outros computadores dentro de uma rede. Estes serviços variam de acordo com a necessidade de uma corporação, partindo de um simples servidor de arquivos (FTP) até outras funcionalidades mais específicas como web, banco de dados, e-mail, proxy, entre outros, nos quais máquinas clientes se conectam e utilizam diversos recursos oferecidos por eles. Usualmente, um serviço é implementado sob um conjunto de regras (protocolo) de envio e recebimento de dados entre o cliente e o servidor, baseando-se em TCP ou UDP.

O TCP (Transmission Control Protocol) e o UDP (User Datagram Protocol) são protocolos relacionados à Camada 4 do Modelo OSI, conhecida como camada de transporte. Atualmente, a maior parte dos computadores conectados em rede acaba utilizando um desses dois protocolos para se comunicar. No entanto, existem algumas peculiaridades a serem consideradas de acordo com a finalidade da transmissão a ser realizada, como garantir a entrega de pacotes de forma ordenada e íntegra.

Apesar de ser necessário compreender as particularidades de cada protocolo, o desenvolvedor Java não precisa se preocupar com a implementação dos protocolos de controle de transmissão de dados, pois o pacote java.net oferece classes que facilitam a comunicação entre computadores. Neste contexto, este artigo aborda os conceitos de comunicação TCP utilizando as classes Socket e ServerSocket a fim de prover a transmissão de dados entre computadores. Para isso, também demonstramos as classes DataInputStream, DataOutputStream, ObjectInputStream e ObjectOutputStream para o envio e recebimento de dados primitivos e objetos.

O protocolo TCP

O TCP é um protocolo orientado à conexão que permite a comunicação entre dois computadores estabelecendo uma conexão (handshaking) antes que qualquer transmissão de dados seja realizada. Dentro desse contexto, cada máquina cliente necessitará estabelecer uma conexão com o servidor, abrindo um canal de comunicação entre os dois computadores conforme apresentado na Figura 1. Assim, é possível conectar vários clientes a um único servidor.

Figura 1. Modelo de Comunicação TCP.

O TCP é um protocolo com algumas vantagens em relação ao protocolo UDP. Entre elas estão a garantia de entrega dos pacotes ao destino, o que certifica a integridade, e a garantia da entrega dos pacotes mantendo a ordem original de envio."

[...] continue lendo...

Artigos relacionados