2011-06-18 14 views
5

Próbuję połączyć z autonomicznym apletu do serwletu uruchomiony na Tomcat:Podłączanie do gniazda na 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(); 
} 
} 

apletu init() tworzy to:

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) { 
      } 
     } 
    } 

mam ten wdrożony przez Eclipse Kocur. Moje pytanie brzmi: do jakiego adresu mój aplet musi się podłączyć? Kiedy i visit http://localhost:8080/scrabServ/connect widzę komunikat "PROWADZENIE" z doGet(), czy to tam, gdzie musi wskazywać?

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); 

to daje mi:

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) 

i punkty do linii new Socket(servlet, 8080).

Odpowiedz

2

Wystarczy otworzyć gniazdo do "localhost", 8080, a następnie wydać polecenie GET scrabServ/connect. Nie można otworzyć gniazda pod określonym adresem URL.

Aby komunikować się z serwletu to zrobić za pomocą parametrów żądania, w zasadzie wydawania polecenia GET takich jak: http://www.jmarshall.com/easy/http/http_footnotes.html#getsubmit

Może należy użyć URLConnection zamiast. Jeśli wyszczególnisz, co dokładnie chcesz zrobić, może lepiej zrozumiem, jak Ci pomóc, może serwer HTTP nie jest nawet potrzebny do tego, co chcesz zrobić.

+0

Przeczytałem, że URLConnection to pojedynczy, pojedynczy schemat odpowiedzi. Potrzebuję stałego połączenia. Czy możesz wyjaśnić, co masz na myśli przez GET? Jak przesłać ciąg "Test" do servlets inputStream przy użyciu GET? – Sbram

+0

@Sbram Rozszerzyłem trochę odpowiedź. – Marcelo

+0

Dziękuję za pomoc. Potrzebuję wielu klientów połączonych z serwletem, aby mogli komunikować się ze sobą i otrzymywać powiadomienia o swoich działaniach. – Sbram