Я пытаюсь создать однопоточный эхо-сервер, но я не могу понять, как снова отправить запрос от клиента обратно клиенту из сервер. Клиент подключается к серверу в порядке, но когда он ждет ответа, он генерирует исключение IOException. Я попытался подключить свой чат-клиент к другим чат-серверам, поэтому я уверен, что ошибка в реализации сервера чата.Создание эхо-сервера: подключенный клиент получает исключение IO
Я предполагаю, что «злодей куска» представлен ниже, который берет вход от подключенного клиента и отправляет его обратно, но я не уверен, почему он не работает.
private void processClientRequest(Socket clientSocket) throws IOException {
InputStream in = clientSocket.getInputStream();
PrintWriter out =
new PrintWriter(clientSocket.getOutputStream());
long time = System.currentTimeMillis();
out.write("Server - " + time + ": " + in);
out.close();
in.close();
}
Скажите, пожалуйста, если этот метод не является проблемой, и вам нужны другие части моего кода. Спасибо заранее!
Редактировать: Мне теперь удалось заставить мой сервер отвечать клиенту. Я сделал это, изменив метод processClientRequest к этому:
try {
BufferedReader in =
new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out =
new PrintWriter(clientSocket.getOutputStream());
long time = System.currentTimeMillis();
out.write("Server - " + time + ": " + in.readLine());
out.close();
try {
in.close();
} catch (IOException e) {
System.err.println("Couldn't close input stream");
}
} catch(IOException e) {
System.err.println("Got an IOException error while reading or writing from/to client");
}
Но сейчас мой сервер может отвечать только клиент один раз. Если клиент записывает на сервер второй раз, он получает ответ, но вместо сообщения клиентов это «null». И так как я хочу, чтобы мой эхо-сервер мог отвечать клиенту до тех пор, пока клиент не выключится или что-то в этом роде, мне нужно выяснить, как это изменить. Я полагаю, что мне понадобится какой-то цикл while, чтобы это произошло, но я попытался, например, поставить весь оператор try в бесконечный цикл while, но это просто дало мне массу IOExceptions.
Поскольку я совершенно новый для stackoverflow, мне нужно спросить: могу ли я задать следующий вопрос, как сейчас, с моим редактированием, или мне нужно создать совершенно новый поток? –
Если ваш первый вопрос был дан ответ, отметьте принятый ответ соответствующим образом и спросите новый. Вы можете ссылаться на первый вопрос для справки. – Fildor