2011-06-18 76 views
5

Tôi đang cố gắng để kết nối từ một applet độc lập để một servlet chạy trên tomcat:Kết nối với ổ cắm trên 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(); 
} 
} 

Servlet của init() tạo này:

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

Tôi đã này được triển khai bởi eclipse để TomCat. Câu hỏi của tôi là applet của tôi cần tạo socket nào? Khi i visit http://localhost:8080/scrabServ/connect tôi thấy thông báo 'RUNNING' từ số doGet() sao cho nó cần phải trỏ đến?

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

này mang lại cho tôi:

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) 

và các điểm đến dòng new Socket(servlet, 8080).

Trả lời

2

Bạn sẽ chỉ phải mở một ổ cắm đến "localhost", 8080 và sau đó phát hành lệnh GET scrabServ/connect. Bạn không thể mở một ổ cắm đến một URL cụ thể.

Để giao tiếp với một servlet bạn làm điều đó thông qua các thông số yêu cầu, về cơ bản ban hành một lệnh GET như: http://www.jmarshall.com/easy/http/http_footnotes.html#getsubmit

Có lẽ bạn nên sử dụng URLConnection để thay thế. Nếu bạn chi tiết chính xác những gì bạn muốn làm, có lẽ tôi có thể có một ý tưởng tốt hơn về làm thế nào để giúp bạn, có thể một máy chủ HTTP thậm chí không cần thiết cho những gì bạn muốn làm.

+0

Tôi đã đọc URLConnection là một yêu cầu duy nhất, một sơ đồ phản hồi đơn. Tôi cần một kết nối liên tục. Bạn có thể giải thích ý của bạn bằng GET? Làm thế nào tôi sẽ chuyển một chuỗi "Test" tới servlet inputStream bằng GET? – Sbram

+0

@Sbram Tôi mở rộng câu trả lời của mình một chút. – Marcelo

+0

Cảm ơn sự giúp đỡ của bạn. Tôi cần phải có nhiều khách hàng kết nối với servlet để họ có thể tương tác với nhau và được thông báo về các hành động khác. – Sbram

Các vấn đề liên quan