У меня есть сервер Java, который прослушивает соединения от клиента PHP и отвечает обратно. Моя проблема в том, что я не могу ничего написать в outputStream после прочтения inputStream.
while (true)
try {
clientSocket = serverSocket.accept();
clientSocket.setSoTimeout(2000);
if (!clientSocket.getInetAddress().equals(clientSocket.getLocalAddress())) {
clientSocket.close();
continue;
}
BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
LinkedList<String> messageFromPHP = new LinkedList<>();
String message = "";
while ((message = br.readLine()) != null)
messageFromPHP.add(message);
bw.write("test_message\n");
bw.flush();
bw.close();
br.close();
clientSocket.close();
} catch (SocketTimeoutException ex) {
} catch (IOException ex) {
ex.printStackTrace();
serverSocket.close();
}
^^ Это делает PHP-клиент и Java-сервер зависшими навсегда. (Я добавил SoTimeout на сервер, чтобы предотвратить это)
while (true)
try {
clientSocket = serverSocket.accept();
clientSocket.setSoTimeout(2000);
if (!clientSocket.getInetAddress().equals(clientSocket.getLocalAddress())) {
clientSocket.close();
continue;
}
BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
LinkedList<String> messageFromPHP = new LinkedList<>();
String message = "";
while ((message = br.readLine()) != null) {
messageFromPHP.add(message);
bw.write("test_message\n");
bw.flush();
}
bw.close();
br.close();
clientSocket.close();
} catch (SocketTimeoutException ex) {
} catch (IOException ex) {
ex.printStackTrace();
serverSocket.close();
}
^^ Однако этот работает отлично, и я не знаю почему. Я уверен, что эти циклы while заканчиваются, потому что я могу напечатать messageFromPHP без проблем с обоими кодами.
Итак, как я могу избежать делать все внутри цикла readLine?
Изменить: Чтобы сделать вещи более понятными: я хочу писать и читать, как первый код. Но когда я читаю ввод, я не могу записать в вывод, поэтому мне приходится использовать второй код, а я не хочу. Я пытаюсь сохранить входные данные в списке messageFromPHP и записать в выходной файл после этого в соответствии с входными данными в списке.
Задача ещё не решена.
Других решений пока нет …