Java-сокет не может ответить за пределами цикла

У меня есть сервер 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 и записать в выходной файл после этого в соответствии с входными данными в списке.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector