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.
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.
Conforme mencionado anteriormente, uma única máquina servidora pode oferecer diversos serviços, e do outro lado, máquinas cliente também podem receber um ou mais serviços. Esse contexto leva à pergunta: como é possível a transmissão de dados de dois ou mais serviços diferentes para um mesmo cliente sem que eles sejam entregues a aplicações erradas?
A resposta está no uso de portas de comunicação, i.e., as aplicações realizam a transmissão de dados por meio de uma única conexão física (cabo, redes sem fio, fibra-ótica, etc.), mas para conseguir direcionar adequadamente os dados enviados/recebidos por aplicações distintas, é utilizado o conceito de portas de comunicação.
Da mesma forma que um endereço IP serve para identificar uma máquina, uma porta de comunicação permite identificar uma aplicação. Vale lembrar ainda que uma interface de rede geralmente é associada a um endereço IP, que possui 65.536 portas (de 0 a 65.535). Assim, quando um programa que utiliza recursos de rede é inicializado, é atribuída uma porta a ele, a qual é adicionada no cabeçalho de cada pacote transmitido pelo programa. Com essas informações é possível identificar para onde enviar um dado e para qual aplicação esse dado deve ser entregue.
...Confira outros conteúdos:
Perguntas frequentes
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.