import java.net.*; import java.io.*; import java.util.*; public class EchoServer{ public static final void main(String[] args){ new EchoServer(); } public EchoServer(){ int port = 7777; try{ /* * Se crea el servidor y se le pone a la * escucha en el puerto _port_ */ ServerSocket server = new ServerSocket(port); System.out.println("Servidor a la escucha en el puerto: "+port); // Cuando hay una conexión lanza un nuevo hilo while(true) new EchoConnection(server.accept()); }catch(Exception e){ System.out.println("Error en el servidor.\n"+e.toString()); } } } class EchoConnection extends Thread{ public static int connections = 0, visits = 0; private Socket socket; public EchoConnection(Socket socket){ this.socket = socket; this.start(); } public void run(){ //Maneja los datos de clientes activos y totales. EchoConnection.connections++; int numCliente = ++EchoConnection.visits; System.out.println("Conexión abierta con cliente número "+numCliente+".\n"+EchoConnection.connections+" usuarios conectados ahora"); try{ //Captura los flujos de entrada/salida BufferedReader entrada = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); PrintWriter salida = new PrintWriter(new OutputStreamWriter(this.socket.getOutputStream()),true); //Captura la entrada String cadena = entrada.readLine(); System.out.println("Recibida cadena \""+cadena+"\" del usuario "+numCliente+".\n"+EchoConnection.connections+" usuarios conectados."); //Devuelve la cadena recibida salida.println(cadena); //Cierra los flujos entrada.close(); salida.close(); //Cierra el socket this.socket.close(); System.out.println("Cerrada conexión con cliente "+numCliente+".\n"+EchoConnection.connections+" usuarios conectados."); }catch(Exception e){ System.out.println("Ocurrió un error.\n"+e.toString()); }finally{ EchoConnection.connections--; } } }