サーブレット側:
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を使用します。その後、サーブレットがPrintWriterを再利用してdoPostメソッドの外部でクリネットと通信しようとしても、何も起こらず、メッセージがクライアントに届くことはありません。何か案は?
PSクライアントコンストラクターの場合:
try {
url = new URL("http://localhost:8182/stream");
conn = (HttpURLConnection) url.openConnection();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException ioE) {
ioE.printStackTrace();
}