Java-servlet与客户端的通信
在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
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和连接有关