Pplware

Sockets: Vamos programar um servidor que diz as horas

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

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.

Exit mobile version