Ir al contenido


Foto

[Ejemplo] Servidor TCP sencillo


  • Por favor identifícate para responder
3 respuestas en este tema

#1 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 05 agosto 2013 - 12:41

Pues como dice el titulo, un ejemplo de un servidor TCP muy sencillo para un teléfono con Android:
[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
  1. D:\>ncat 192.168.10.102 55555
  2. Hola
  3. Recibido: Hola
  4. Adios
  5. Recibido: Adios
  6. Bye.
  7. Recibido: Bye.




  • 0

#2 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 06 agosto 2013 - 01:17

Cómo te gustan estas cosas!!! jejejeje

Gracias por compartirlo con nosotros ;-)

  • 0

#3 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 06 agosto 2013 - 02:22

Cómo te gustan estas cosas!!! jejejeje


;) Si, si que me gustan
  • 0

#4 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 06 agosto 2013 - 07:29

Amigo, que buen dato. :D Esto va pal face jojojojo. Gracias por compartir tu sabiduria.
  • 0




IP.Board spam blocked by CleanTalk.