@Override public void run() { try { ServerSocket serverSocket = new ServerSocket(listenPort); while (serverSocket != null) { Socket socket = null; System.out.println("Creando socket."); // Avisamos que estamos en el accept (sigue a partir del wait). synchronized (this) { this.notify(); } socket = serverSocket.accept(); System.out.println("Conexión de: " + socket.getRemoteSocketAddress().toString()); String peticion = null; String respuesta = null; while (true) { byte[] request = new byte[TAMANIO_BUFFER]; try { int tamanio = socket.getInputStream().read(request); peticion = new String(request, 0, tamanio); System.out.println("Reuqest: " + peticion); // Invocamos la interface mockeada. respuesta = (String) handle.handleRequest(peticion); System.out.println("Response: " + respuesta.toString()); socket.getOutputStream().write(respuesta.getBytes()); } catch (IOException e) { e.printStackTrace(); // Cerramos el socket para retornar -1. socket.close(); } // Volvemos al accept. break; } } } catch (IOException ex) { ex.printStackTrace(); System.exit(-1); } }