[java]
package com.jmrds.tcptest;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import java.io.*;
import java.net.*;
public class MainActivity extends Activity {
// Esta clase maneja la conexion con el cliente
public class Cliente implements Runnable {
Socket socket;
// Se pasa como parametro el socket
public Cliente(Socket s) {
socket = s;
}
public void run() {
String linea;
try {
// Obtenemos los streams de entrada y de salida del socket
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
try {
// Mientras se reciban lineas
while ((linea = in.readLine()) != null) {
// Las enviamos de vuelta
out.println("Recibido: " + linea);
// Si recibimos "Bye." entonces cerramos la conexion
if (linea.equals("Bye."))
break;
}
} finally {
// Cerramos los streams
out.close();
in.close();
// Cerramos el socket
socket.close();
}
} catch (Exception e) {
// Si hay cualquier problema lo mostramos
Log.e("TCPTest", "exception", e);
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Creamos el servidor dentro de un thread propio, fuera del thread principal
new Thread( new Runnable() {
public void run() {
ServerSocket serverSocket;
try {
// Creamos un socket y lo ponemos a la "escucha"
serverSocket = new ServerSocket(55555);
try {
// Aceptamos nuevas conexiones en un bucle infinito
while (true) {
// Para cada conexion creamos un nuevo thread que la maneja
new Thread(new Cliente(serverSocket.accept())).start();
}
} finally {
// Cerramos el socket del servidor
serverSocket.close();
}
}
catch (Exception e) {
Log.e("TCPTest", "exception", e);
}
}
}).start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
[/java]
No hay que olvidar de añadir los permisos correspondientes en el manifiesto de la aplicacion:
<uses-permission android:name="android.permission.INTERNET"/>
El servidor no puede ser mas simple, al iniciar se queda escuchando por el puerto 55555 y por cada conexión nueva crea un nuevo thread para manejarla.
Podemos probarlo usando por ejemplo ncat desde la consola de windows (o linux)
delphi
D:\>ncat 192.168.10.102 55555 Hola Recibido: Hola Adios Recibido: Adios Bye. Recibido: Bye.