Подключение к сокету на Tomcat? - PullRequest
5 голосов
/ 18 июня 2011

Я пытаюсь подключиться из автономного апплета к сервлету, запущенному на 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 я вижу сообщение 'RUNNING' от doGet(), так что это, куда нужно указать?

Апплет:

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

это дает мне:

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)

и указывает на линию new Socket(servlet, 8080).

1 Ответ

2 голосов
/ 18 июня 2011

Вам нужно будет только открыть сокет для "localhost", 8080 и затем выполнить команду GET scrabServ/connect. Вы не можете открыть сокет для определенного URL.

Для связи с сервлетом вы делаете это с помощью параметров запроса, в основном выполняя команду GET, такую ​​как: http://www.jmarshall.com/easy/http/http_footnotes.html#getsubmit

Возможно, вам следует использовать URLConnection . Если вы подробно опишите, что именно вы хотите сделать, возможно, я смогу лучше понять, как вам помочь, может быть, HTTP-сервер даже не нужен для того, что вы хотите сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...