Pplware

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

Aprenda a programar uma aplicação cliente para Android

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), e de termos implementado a aplicação servidor (ver aqui), hoje vamos aprender a programar para Android, uma aplicação cliente, 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 cliente não é difícil e podemos aproveitar muito do código partilhado (gentilmente) por muitos programadores. A aplicação cliente foi desenvolvida em Java+XML no Eclipse.

Para desenvolverem a aplicação para Android, devem criar no eclipse um novo projecto Android, dar-lhe por exemplo o nome Socket Client e inserir o seguinte código na classe SocketClient.java.

Código fonte da classe SocketClient.java
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class SocketClient extends Activity {

EditText textOut;
TextView textIn,ip,porto;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

textOut = (EditText)findViewById(R.id.textout);
ip = (EditText)findViewById(R.id.edtIP);
porto = (EditText)findViewById(R.id.edtPorto);
Button buttonSend = (Button)findViewById(R.id.send);
textIn = (TextView)findViewById(R.id.textin);
buttonSend.setOnClickListener(buttonSendOnClickListener);
}

Button.OnClickListener buttonSendOnClickListener
= new Button.OnClickListener(){

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Socket socket = null;
DataOutputStream dataOutputStream = null;
DataInputStream dataInputStream = null;

try {
socket = new Socket(ip.getText().toString(), Integer.parseInt(porto.getText().toString()));
dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream.writeUTF(textOut.getText().toString());
textIn.setText(dataInputStream.readUTF());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} 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 (dataOutputStream != null){
try {
dataOutputStream.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();
}
}
}
}};
}

Para a produção do layout, devem colocar o seguinte código no ficheiro main.xml

Código fonte do ficheiro main.xml




    

    


    

    

    

    

    

        
    

    


Importantíssimo: No ficheiro manifest.xml devem incluir a seguinte informação

<uses-permission android:name="android.permission.INTERNET"/>

Depois de compilado o código, o resultado será algo deste género, onde o utilizador deverá no campo IP, o endereço IP do servidor e no campo Porto, o porto de comunicação com o servidor.

A partir de agora é só testar e verificar se a aplicação cliente comunica com a aplicação servidor. Caso tenham alguma duvida ou problema não hesitem em deixar os vossos comentários.

Os sockets são sem duvida uma forma simples de colocar duas, ou mais aplicações a comunicarem entre si. É bastante simples a sua implementação e este mecanismo está disponível para todas as linguagens de programação. Com este tutorial fechamos esta rubrica sobre sockets. Dicas e sugestões são bem vindas para próximas rubricas.

Exit mobile version