Pplware

Redes – Sabe o que são sockets de comunicação? (Parte II)

Aprenda a programar uma aplicação servidor em Java

Quem gosta de tecnologia, certamente já se questionou como determinados sistemas funcionam e comunicam. Hoje em dia, graças a adopção, como strandard, 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?

Depois de termos apresentado um artigo sobre sockets e como funcionam (ver aqui), hoje vamos aprender a programar, em Java, uma aplicação servidor, usando 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 é 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.

Programar uma aplicação servidor não é difícil e podemos aproveitar muito do código partilhado (gentilmente) por muitos programadores. A aplicação servidor que proponho, foi desenvolvida em Java e nesse sentido o utilizador (para este tutorial) apenas necessita de ter o Java instalado e um editor de texto.

Para começar, vamos criar um ficheiro com o nome SocketServer.java e adicionar o seguinte código

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {

public static void main(String[] args){
ServerSocket serverSocket = null;
Socket socket = null;
DataInputStream dataInputStream = null;
DataOutputStream dataOutputStream = null;

try {
serverSocket = new ServerSocket(50000);
System.out.println("Socket Servidor Pplware");
System.out.println("A escuta no porto: 50000");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

while(true){
try {
socket = serverSocket.accept();
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream = new DataOutputStream(socket.getOutputStream());
System.out.println("IP Cliente: " + socket.getInetAddress());
dataOutputStream.writeUTF("Ola: !"+ socket.getInetAddress());
dataOutputStream.writeUTF(""+socket.getLocalPort());

System.out.println("Mensagem: " + dataInputStream.readUTF());

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if( socket!= null){
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

if( dataInputStream!= null){
try {
dataInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

if( dataOutputStream!= null){
try {
dataOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}

Depois deve gravar (no meu caso gravei na partição D:)

Em seguida devem ir linha de comandos do Windows (Iniciar > executar e escrever cmd), posicionarmos-nos na pasta onde temos o ficheiro com a classe criada anteriormente e vamos proceder à compilação da mesma usando o comando:

javac SocketServer.java

O ficheiro compilado é designado de ByteCode, passando este a ser interpretado pela  Java Virtual Machine…e em seguida colocamos a aplicação servidor a correr usando o comando

java SocketServer

Para testarem se tudo está a funcionar, podem por exemplo fazer um telnet para o porto que está agora a espera de ligações. Para isso, basta que executem o seguinte comando:

telnet localhost 50000

Num próximo tutorial iremos proceder a configuração da aplicação cliente. Caso pretendam algum esclarecimento relativamente ao código disponibilidade, 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 a espera de ligações. Por cada cliente que se ligue, é criado um socket e os streams de comunicação (de output e input).

Exit mobile version