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.
Hoje vamos ensinar como podem programar um simples servidor que informa as horas aos clientes que solicitem.
O que são sockets?
Actualmente existem algumas tecnologias que permitem a comunicação entre máquinas. Uma das tecnologias/mecanismos mais comuns para comunicação entre máquinas são 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 – Saber mais aqui.
Como podemos ver pela imagem seguinte, para este modelo de comunicação haverá um servidor e um cliente. O servidor será iniciado e ficará à espera de pedidos dos clientes num porto específico.
Depois o cliente estabelece a ligação (usando o IP do servidor e porto) e, se tudo correr bem, o cliente e servidor passam a trocar informações entre eles.
No final da troca de mensagens, o cliente e o servidor fecham a comunicação.
Desenvolvimento de app cliente/servidor em Java
Programar uma aplicação cliente e servidor não é difícil e podemos sempre aproveitar muito do código partilhado (gentilmente) por muitos programadores. A aplicação servidor e cliente que propomos, foi desenvolvida em Java, nesse sentido o utilizador (para este tutorial) apenas necessita de ter o Java instalado e um editor de texto.
Na prática o servidor vai receber pedidos dos clientes, num porto específico e vai-lhes responder com as horas do sistema.
Pré-Requisitos
- Para que tudo funcione devem ter o java instalado
- Um editor de texto (opcional)
Nota: Para este tutorial vamos recorrer ao Xubuntu.
Para instalar a versão que pretendemos do java basta abrir o terminal e inserir o seguinte comando:
sudo apt-get install default-jdk
Caso pretendam instalar um editor de texto básico como o gedit, usem o seguinte comando:
sudo apt-get install gedit
Depois abram o gedit e copiem o seguinte código para o servidor e para o cliente. Assim devem criar dois ficheiros Servidor.java e Cliente.java
Código fonte do Servidor
Código fonte do Cliente
Nota: Caso tenham alguma dúvida na interpretação do código deem-nos essa indicação nos comentários.
Em seguida devem ir à linha de comandos do Linux, posicionar na pasta onde têm os ficheiros criados anteriormente e proceder à compilação dos mesmos. Iniciem pelo servidor.
[SERVIDOR]
javac Servidor.java
O ficheiro compilado é designado de ByteCode, passando este a ser interpretado pela Java Virtual Machine. Para executar o ficheiro já compilado usem o seguinte comando:
java Servidor
Para testarem se tudo está a funcionar, podem por exemplo fazer um telnet para o porto que está agora à espera de ligações. Para isso, basta que executem o seguinte comando a partir da própria máquina:
telnet 127.0.0.1 65333
[CLIENTE]
Agora é a vez de tratar do cliente. Para proceder à compilação do ficheiro devem usar o comando
javac Cliente.java
Para executar o ficheiro já compilado usem o seguinte comando:
java Cliente
Para começar introduzimos o endereço IP do servidor e carreguem em OK
Nota: Caso o cliente esteja a ser executado noutra máquina diferente do servidor, devem indicar o endereço que está atribuído à placa de rede do servidor.
E aqui está o resultado,
Como referimos, caso pretendam algum esclarecimento relativamente ao código disponibilizado, deixem esse pedido nos comentários. Na prática, a aplicação servidor implementa um ciclo while infinito, possibilitando desta forma que o servidor esteja sempre à espera de ligações. Por cada cliente que se ligue, é criado um socket e os streams de comunicação (de output e input).
Do lado do cliente apenas é estabelecida uma comunicação para o servidor, tendo em conta o IP deste e para o porto no qual está à escuta.