2011-06-18 14 views
5

Tomcatのソケットに接続していますか?私は、Tomcat上で実行しているサーブレットにスタンドアロンアプレットから接続しようとしている

サーブレット

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

サーブレットのinit()はこれを作成します。

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

私はこれに日食で展開していますTomCat。私の質問は、私のアプレットがどのソケットにソケットを作る必要があるのでしょうか? i visit http://localhost:8080/scrabServ/connect私はdoGet()から 'RUNNING'メッセージが表示されるので、それがポイントする必要があるのですか?

アプレット:

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

これは私に与える:new Socket(servlet, 8080)ラインへ

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) 

とポイント。

答えて

2

"localhost", 8080にソケットを開いてからGET scrabServ/connectコマンドを発行するだけで済みます。特定のURLにソケットを開くことはできません。たぶんあなたの代わりにURLConnectionを使用する必要がありますhttp://www.jmarshall.com/easy/http/http_footnotes.html#getsubmit

:あなたは基本的にのようなGETコマンドを発行し、リクエストパラメータを経由して、それを行うサーブレットとの通信に

。正確に何をしたいのかを詳述すれば、おそらくあなたの手助けをするための良いアイデアがあるかもしれません。多分、HTTPサーバはあなたがしたいことに必要なものではないでしょう。

+0

私は、URLConnectionはシングルリクエスト、シングルレスポンススキームであると読んでいます。私は常時接続が必要です。 GETの意味を説明できますか? GETを使用して文字列 "Test"をサーブレットのinputStreamに転送するにはどうすればよいですか? – Sbram

+0

@Sbram私はちょっと答えを広げました。 – Marcelo

+0

ありがとうございました。私はサーブレットに複数のクライアントを接続させて、相互にやりとりし、それぞれのアクションを通知できるようにする必要があります。 – Sbram

関連する問題