Programar um servidor em Java que receba dados de um dispositivo Android é uma tarefa fácil, mas que poderá conter alguns problemas. Dado o “Curso Android” aos leitores (se estiver interessado, poderá começar aqui o curso, lendo a explicação do Android Studio), fica mais uma sugestão para criar um exemplo fácil e prático, usando Sockets.
Antes de mais, também deverá dar uma vista de olhos no curso de java que foi fornecido por nós, aqui (Primeiro Capítulo: Introdução ao NetBeans)
Como programar um servidor Java com um cliente Android usando Sockets?
Neste artigo iremos explicar como criar um servidor Java que aceita apenas um cliente Android. A comunicação será feita via sockets. O código, segue-se a seguir.
[wptab name=Java Server]
O código que se segue inclui os imports, a classe e as funções de inicialização do socket e seu buffer para receber mensagens. O servidor irá inicializar e ficar “à escuta” por uma nova mensagem.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class Server { private ServerSocket server; private Socket client; private BufferedReader in; private String line; public Server(){ line = ""; listenSocket(); } public void listenSocket() { // Colocar o porto em escuta (Porto = 4500) try { server = new ServerSocket(4500); } catch (IOException e) { System.out.println("Could not listen on port 4500"); System.exit(-1); } writeInfo("Listen on Port 4500"); //Aceitar cliente try { client = server.accept(); } catch (IOException e) { System.out.println("Accept failed: 4500"); System.exit(-1); } writeInfo("Client Accepted"); //Preparar Buffers try { in = new BufferedReader(new InputStreamReader(client.getInputStream())); } catch (IOException e) { System.out.println("Read failed"); System.exit(-1); } writeInfo("Buffereds Accepted"); //Colocar o socket à escuta, à espera de mensagens do cliente while (true) { try { //Read message from client line = in.readLine(); //Print message from client System.out.println("Message from client: " + line); } catch (IOException e) { System.out.println("Read failed: " + e.toString()); System.exit(-1); } } } }
[/wptab]
[wptab name=Android Client]
O cliente que se segue é um cliente android que irá enviar uma mensagem para o servidor anteriormente mencionado.
Nota: Repare que existe uma parte do código que é necessário o IP (private static String IP;). Deverá substituir a palavra [IP] pelo IP da máquina onde o servidor irá correr. Para isso basta abrir a linha de comandos no seu computador e digitar o comando: “ipconfig“. Depois copie o IP que está à frente da linha “IPv4 Address”
import android.os.AsyncTask; import android.util.Log; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; public class ClientConnection extends AsyncTask{ // DEVE COLOCAR AQUI O IP DA SUA MÁQUINA private static String IP = "[IP]"; private static int PORT = 4500; private Socket socket = null; private PrintWriter out = null; private BufferedReader in = null; public ClientConnection(){ } @Override protected Object doInBackground(Object[] params) { try { socket = new Socket(IP, PORT); out = new PrintWriter(socket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); } catch (IOException e) { Log.d("DEBUG ERROR", e.toString()); } return null; } public boolean sendMessage(String message){ out.println(message); return true; } private void closeAll(){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
[/wptab]
[wptab name=Layout]
Para o layout, basta inserir um botão que invoque a função mencionada no código anterior. A função é a “sendMessage”.
<Button android:id="@+id/btnSendChallenge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="sendMessage" android:text="Button" tools:layout_editor_absoluteX="147dp" tools:layout_editor_absoluteY="140dp" />
[/wptab]
[wptab name=Permissões Android]
Para o código correr com sucesso, deverá ainda dar permissões ao dispositivo android para aceder a Internet. Por isso, abra o ficheiro “AndroidManifest.xml” que deverá estar dentro da pasta “app/manifests” e coloque as seguintes permissões:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" />
[/wptab]
[end_wptabset]
A partir de agora deverá correr numa primeira fase o servidor e depois o cliente android.
Verifique que sempre que carrega no botão da sua aplicação Android, o servidor recebe uma mensagem.