Redes – Sabe o que são sockets de comunicação? (Parte I)
A interoperabilidade de sistemas é um requisito fundamental no mundo tecnológico!
Quem gosta de tecnologia, certamente já se questionou como determinados sistemas funcionam e comunicam. Hoje em dia, graças a adopção, como standard, do protocolo IP, os dispositivos conseguem facilmente “comunicar” entre eles de uma forma totalmente transparente para o utilizador.
Mas como é que uma aplicação cliente consegue, por exemplo, comunicar com uma aplicação servidor e vice-versa?
Actualmente existem algumas tecnologias que permitem a comunicação entre máquinas. Uma das tecnologias/mecanismos mais comuns para comunicação entre máquinas é os sockets. Socket é um mecanismo de comunicação, usado normalmente para implementar um modelo cliente/servidor, que permite a troca de mensagens entre os processos de uma máquina/aplicação servidor e de uma máquina/aplicação cliente.
Como funciona o mecanismos de sockets?
Imagine por exemplo que precisa de desenvolver uma aplicação servidor que funcione como uma “sala” de chat. Na prática essa aplicação irá receber ligações dos clientes (num determinado porto) e posteriormente, se um cliente enviar uma mensagem, o servidor envia essa mensagem para todos os outros clientes.
Ou imagine por exemplo que tem instalado um sensor de temperatura numa máquina e uma aplicação servidor que controla esse sensor, dando informações sobre o estado do tempo. A aplicação cliente, poderá ligar-se remotamente à aplicação servidor e obter também essa informação….tudo isto é possível de desenvolver usando sockets,
De uma forma geral, existe uma aplicação que cria um socket servidor e uma outra aplicação que implementa um cliente. Existem principalmente dois tipos de sockets: Socket_Stream (aka TCP) ou SOCK_DGRAM (aka UDP). Os sockets TCP garantem fiabilidade na comunicação (garantia da entrega de pacotes), enquanto os sockets UDP não dão garantia na entrega de pacotes a nível da camada de transporte). Para saber mais sobre os protocolos de transporte TCP e UDP, aconselhamos a lerem o nosso artigo Protocolo TCP vs Protocolo UDP. Depois de estabelecida a ligação entre aplicações/processos, a aplicação cliente passa a poder enviar mensagens para a aplicação servidor (que pode também funcionar como socket cliente) via socket.
Sockets TCP
Sockets, são uma abstracção para endereços de comunicação através dos quais processos comunicam. Cada endereço tem um identificador único composto pelo endereço da máquina e o identificador local da porta usado pelo processo. Este identificador de porta é usado para mapear dados recebido pela máquina para processos (aplicações) específicos. O processo de comunicação no modo orientado à ligação ocorre da seguinte forma: o servidor é colocado num determinado porto e aguarda por ligações a essa porta. O cliente deve saber previamente qual o nome ou IP do servidor e o respectivo porto onde o servidor foi colocado à espera de ligações. Então o cliente solicita uma ligação ao host (servidor)/porto conforme demonstra a figura seguinte.
Se nenhum problema ocorrer, o servidor aceita a ligação gerando um socket num porto vago do lado do servidor, criando assim um canal de comunicação entre o cliente e o servidor. De referir que o porto original fica livre para poder receber outros pedidos de ligação. A figura seguinte demonstra esse mesmo canal de comunicação.
Tipicamente o comportamento do servidor é ficar em loop, aguardando novas ligações e “gerando” sockets para atender as solicitações de clientes. para saberem mais sobre este assunto, aconselhamos a lerem o nosso artigo sobre Como é que o meu MSN comunica com o teu?
Num próximo artigo iremos mostrar, passo a passo, como é feita a comunicação entre aplicações/processos, usando sockets TCP.
Este artigo tem mais de um ano
Fantástico
Muito obrigado por toda a ajuda que me dão a preparar as minhas formações 🙂
Fico a espera dos próximos tutoriais.
Pedro Pinto ,
Sempre com artigos interessantes , aguardo os próximos tutoriais sou um seguidor deles e em caso de dúvida acedo aos arquivos do Pplware foi assim que no passado fim de semana acabei por criar um servidor em minha casa ideia que já tinha a algum tempo , mas que por falta de conhecimentos e por puro comodismo fui arrastando a decisão .
Aceita os meus sinceros cumprimentos
Serva
Thanks Serva! De facto o desafio do Pplware é ter sempre artigos interessantes e sem validade de consumo 🙂
Muito bom! Obrigado por estes artigos, são sempre bem vindos!
Muito obrigado pela partilha da informação. Tenho apreendido muito com voçês.
Tenho conhecimento de que as conversas no Windows Live Messenger não são encriptadas. Em que circunstâncias elas podem ser interceptadas por terceiros? Apenas no caso de uma rede local (por exemplo escritório) ou também alguém a aceder à nossa internet wireless? E no caso de ser preciso encriptar as conversas, suponho que ambos os interlocutores tenham de implementar a encriptação, certo? à semelhança do que permite fazer o Pidgin.
Interessante pergunta. como leigo gostaria muito que isso fosse respondido também. Alias, favor apresentar exemplos aplicados a whatsapp também se possível. gostaria de entender como essas informações podem ser interceptadas.
Muito legal o site. É a primeira vez que acesso, mas gostei do conteúdo.
Grato!
Excelente Artigo!
No 3º ano de Eletrotecnia na FEUP na cadeira de sistemas de informação o trabalho final era implementar isto. Bem engraçado.
Implementar, ou utilizar?
Provavelmente será implementar um chat.
Que lolada de trabalho então.. tinha a FEUP em melhor conta:P
Nem fazia ideia o que era, continuem com este tipo de informação e tutoriais.
Boa malha. Um bom exemplo é o velhinho IRC.
Cumprimentos e Larguras
Grande iniciativa! A nível académico já fiz utilizei UDP e TCP e prefiro TCP pela fiabilidade.
Só um pequeno comentário, dentro das sockets, existem sockets activas e passivas.
A passiva é aquela onde o cliente se liga ao servidor, depois é gerada uma socket activa de comunicação para cada cliente, tal como explicado no artigo.
Só por curiosidade, qual é a linguagem que vão utilizar para demonstração ?
Parabéns pelo artigo.
Vou usar Java. Queres colaborar?
Bom artigo, sem duvida!
Já implementei/programei sockets tcp e udp na faculdade mas em C. Em Java não consigo ajudar.
Agradeço o convite, mas de momento encontro-me bastante atarefado. Mas prometo que quando esta fase passar, faço um artigo para o pplware.
No entanto se for preciso ajuda em algum detalhe técnico( o que duvido… ) fica a vontade para me contactar.
É impressão minha ou tem palavras repetidas no parágrafo 5? A palavra “aplicação” aparece duas vezes seguidas.
Viva Filipe. Obrigado pelo reparo.
Muito bom, esclareceu minha dúvida a respeito de sockets.
ótima matéria sobre SOCKET,
Porém tenho o seguinte questionamento:
Frota com vários veículos com validadores independentes que precisam fechar comunicação com servidor, retornando:
(1022) erro ao ler dados do socket
– Motivo presumível: várias antenas espalhadas, (creio que pelo fato dos veículos estarem em circulação ocasiona este erro.
– Este um limite de conexões simultâneas de clientes para o servidor ??