Conectar applet con servlet mediante sockets

XMaverick
26 de Abril del 2005
Hola a todos!!

Estoy intentando comunicar un applet y un servlet abriendo un socket en el servlet y haciendo que espere alguna comunicación por un puerto que yo le digo, pero el servlet no me responde. Igual es que no se pueden utilizar sockets en los servlets, no sé. Igual es que lo estoy haciendo mal, ya que lo hago en el service(). En principio se podría, no?La verdad es que soy nuevo en ésto de los servlets y estoy un poco perdido. Gracias por vuestra ayuda. Os dejo el código del servlet:

import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Servlet1 extends HttpServlet
{
static final int PUERTO = 4130;

public void service (HttpServletRequest req, HttpServletResponse res)
throws IOException
{
ServerSocket s = new ServerSocket (PUERTO);
System.out.println("Servidor iniciado");
try
{
while (true)
{
// Se bloquea hasta que se da una conexión:
Socket socket = s.accept () ;


try
{
new ServirUnParlante (socket) ;
}
catch (IOException e)
{
// Si falla, cerrar el socket,
// si no, lo cerrará el hilo:
socket.close () ;
}
}
}
finally
{
s.close () ;
}
}
}


class ServirUnParlante extends Thread
{
private Socket socket;
private BufferedReader entrada;
private PrintWriter salida;

public ServirUnParlante (Socket s) throws IOException
{
socket = s;
entrada = new BufferedReader (new InputStreamReader(socket.getInputStream()));

// Habilitar el autovaciado (con el true):

salida =
new PrintWriter (
new BufferedWriter (
new OutputStreamWriter(
socket.getOutputStream())), true);

// Si cualquiera de las llamadas de arriba lanza una
// excepción, el llamador es responsable de
// cerrar el socket. De lo contrario lo cerrara
// el hilo.

start(); // Llama a run()
}

public void run()
{
try
{
while (true)
{
String str = entrada.readLine () ;
if (str.equals ("FIN") )
break;
System.out.println ("Haciendo eco: " + str) ;
salida.println (str) ;
}

System.out.println ("cerrando. . . ") ;
}
catch(IOException e)
{
System.err.println ("Excepcion E/S1") ;
}
finally
{
try
{
socket.close () ;
}
catch(IOException e)
{
System.err.println("Socket sin cerrar");
}
}
}
}