Java-servlet与客户端的通信

Java-servlet与客户端的通信,java,servlets,client,client-server,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:" + r

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

在床侧:

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方法中可用的httpresponse获得的PrintWriter。之后,当servlet尝试重用PrintWriter在doPost方法之外与客户机对话时,什么也没有发生,消息永远不会到达客户机。有什么想法吗

客户建造商的注意事项:

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

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


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

发布整个代码而不是随机片段会让事情变得更清楚。另外,“当客户端请求连接并以相同的方法等待响应时”,您是指同一个客户端,还是第二个新客户端?同一个客户端,并且在发出连接请求的相同方法中,它也在等待响应。我认为这个问题与重用URL和连接有关