2011-06-18 20 views
5

Estoy intentando conectar desde un applet de autónomo a un servlet que se ejecuta en Tomcat:¿Conectar a socket en Tomcat?

servlet

public void init(ServletConfig config) throws ServletException { 
    super.init(config); 
    // Start a daemon thread 
    try { 
     daemonThread = new Daemon(this); 
     daemonThread.start(); 
    } 
    catch (Exception e) { 
    } 
} 

protected int getSocketPort() { 
    return 8080; 
} 

public void handleClient(Socket client){ 
    new ScribbleThread(this, client).start(); 
} 

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
    PrintWriter out = response.getWriter(); 
    StringBuffer sb = new StringBuffer(); 
    sb.append("<html><body bgcolor=pink text=red>"); 
    sb.append("<h1 align=center>RUNNING</h1><hr>"); 
    sb.append("</body></html>"); 
    out.println(sb); 
    out.close(); 
} 
} 

de servlet init() crea esto:

class Daemon extends Thread { 
private ServerSocket serverSocket; 
private SocketServlet servlet; 

public Daemon(SocketServlet servlet) { 
this.servlet = servlet; 
} 

public void run() { 
    try { 
     // Create a server socket to accept connections 
     serverSocket = new ServerSocket(servlet.getSocketPort()); 
    } 
    catch (Exception e) { 
     return; 
    } 
    try { 
     while (true) { 
      try { 
       servlet.handleClient(serverSocket.accept()); 
      } 
      catch (IOException ioe) { 
      } 
     } 
    } 

esto he desplegado por eclipse Gato. Mi pregunta es ¿a qué dirección necesita mi applet hacer el socket? Cuando i visit http://localhost:8080/scrabServ/connect veo el mensaje 'EN EJECUCIÓN' del doGet(), ¿dónde está el punto?

Applet:

public static String testConnection(){ 
    InputStream in = null; 
    try { 
     // Make socket connection to servlet 
     String servlet = new String("localhost/scrabServ/connect"); 
     Socket socket = new Socket(servlet, 8080); 

esto me da:

Exception in testConnection()java.net.UnknownHostException: localhost/scrabServ/connect 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:195) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432) 
at java.net.Socket.connect(Socket.java:529) 
at java.net.Socket.connect(Socket.java:478) 
at java.net.Socket.<init>(Socket.java:375) 
at java.net.Socket.<init>(Socket.java:189) 
at scribble.Scribble.testConnection(Scribble.java:41) 
at scribble.Scribble.main(Scribble.java:28) 

y apunta a la línea new Socket(servlet, 8080).

Respuesta

2

Solo tendrías que abrir un socket al "localhost", 8080 y luego emitir un comando GET scrabServ/connect. No puede abrir un socket a una URL específica.

para comunicarse con un servlet lo haces a través de parámetros de la petición, básicamente, la emisión de un comando GET tales como: http://www.jmarshall.com/easy/http/http_footnotes.html#getsubmit

Tal vez deberías utilizar URLConnection lugar. Si detalla qué es exactamente lo que quiere hacer, tal vez pueda tener una mejor idea de cómo ayudarlo, tal vez un servidor HTTP ni siquiera es necesario para lo que quiere hacer.

+0

He leído que URLConnection es un solo pedido, esquema de respuesta única. Necesito una conexión constante. ¿Puedes explicar a qué te refieres con GET? ¿Cómo transferiría una cadena "Test" a los servlets inputStream usando GET? – Sbram

+0

@Sbram Expandí mi respuesta un poco. – Marcelo

+0

Gracias por su ayuda. Necesito tener varios clientes conectados al servlet para que puedan interactuar entre ellos y recibir notificaciones de las acciones de los demás. – Sbram

Cuestiones relacionadas