【发布时间】:2012-08-18 23:49:21
【问题描述】:
在 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 对话时,什么也没有发生,消息永远不会到达客户端。有什么想法吗?
附:在客户端构造函数中:
try {
url = new URL("http://localhost:8182/stream");
conn = (HttpURLConnection) url.openConnection();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException ioE) {
ioE.printStackTrace();
}
【问题讨论】:
-
发布整个代码而不是随机的部分会使事情更清楚。另外,“当客户端请求连接并以相同的方法等待响应时”,您是指同一个客户端,还是第二个新客户端?
-
同一个客户端,以同样的方法发出连接请求,它也在等待响应。我认为问题与重用 URL 和连接有关
标签: java servlets client client-server