在 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 方法中可用的 HttpRespnse 获取的 PrintWriter。之后,当 servlet 尝试重用 PrintWriter 与 doPost 方法之外的 clinet 对话时,什么也没有发生,消息永远不会到达客户端。有任何想法吗?
PS 在客户端构造函数中:
try {
url = new URL("http://localhost:8182/stream");
conn = (HttpURLConnection) url.openConnection();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException ioE) {
ioE.printStackTrace();
}