Java - servlet和客户端之间的通信

时间:2012-08-18 23:49:21

标签: java servlets client client-server

在Servlet端:

for (GameParticipant activePlayer : connector.activePlayers) {
            activePlayer.out.println(response);
            activePlayer.out.flush();
            System.out.println("Server sending board state to all game participants:" + response);

(activePlayer.out是从客户端第一次连接时获取的HttpResponse对象保存在服务器中的PrintWriter)

在clinet方面:

private void receiveMessageFromServer() {
    try {
        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        StringBuilder sb = new StringBuilder();
        String input = null;
        while ((input = br.readLine()) != null){
            sb.append(input).append(" ");
        }
        }

由于某种原因,当客户端请求连接并在同一方法中等待响应时,此通信仅在第一次工作时,而服务器使用直接从doPost方法中的可用HttpRespnse获取的PrintWriter。之后,当servlet尝试重用PrintWriter与doPost方法之外的clinet通信时,没有任何反应,消息永远不会到达客户端。有什么想法吗?

P.S。在客户端构造函数中:

try {
        url = new URL("http://localhost:8182/stream");
        conn = (HttpURLConnection) url.openConnection();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException ioE) {
        ioE.printStackTrace();
    }

1 个答案:

答案 0 :(得分:1)

响应输出流在doPost()方法之外无效,或者更恰当地说是service()方法。它只能用于发送一个响应。但是,PrintWriter会吞下异常,因为当您检查其错误状态时会发现异常,因此您没有看到问题。

换句话说,整个服务器端设计存在缺陷。你不能以这种方式滥用Servlet规范。