Я пытаюсь отправить несколько строк кода с клиента на сервер.
Вот код на стороне сервера
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
//read client input
//multi line
//https://stackoverflow.com/questions/43416889/java-filereader-only-seems-to-be-reading-the-first-line-of-text-document?newreg=2f77b35c458846dbb1290afce8853930
String line = "";
while((line =in.readLine()) != null) {
System.out.println(line);
}
System.out.println("is it here?");
Вот код на стороне клиента:
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
while (true) {
System.out.print("> ");
//content server input command (put, lamport clock, message)
String command = keyboard.readLine();
if (command.equals("quit")){
break;
}
//read from CSDB/txt1.txt
String message = readFileReturnString("CSDB/txt1.txt", StandardCharsets.UTF_8);
System.out.println(message);
//send to clientHandler through PrintWriter
out.println(command + " 3 \n" + message);
//receive response from ClientHandler (lamport clock)
String serverResponse = input.readLine();
System.out.println(serverResponse + socket);
}
Сторона сервера может распечатать весь текст, отправленный со стороны клиента. Однако цикл while не прерывается, и System.out.println("is it here?"); никогда не был казнен.
Могу ли я узнать, почему и как я могу решить эту проблему, пожалуйста?
Но я хотел бы повторно использовать этот сокет. Поскольку я могу отправить сообщение с клиента на сервер более одного раза.
Затем вам нужно сообщить серверу, когда он должен выйти из цикла. Вы можете отправить специальную строку или что-то в этом роде.
Или используйте неблокирующий
@ g00se это не поможет.
@talex не уверен, почему ты так говоришь
@ g00se, потому что неблокирующий ввод-вывод не поможет серверу понять, когда эта конкретная часть связи завершена. Если вы думаете, что я ошибаюсь, не могли бы вы объяснить свое предложение более подробно.
@talex Ну, я прочитал, это здесь? как «это строка отладки», а не «я понятия не имею, что клиент собирается отправить». Итак, если моя догадка верна, когда «единица связи» поступает в неблокирующий ввод-вывод, эта единица может быть захвачена и обработана.
Ваш Клиент ждет какого-то ответа Сервера. Но Сервер не отправляет никакого ответа. Сервер пишет только в System.out
. Сервер должен написать ответ с помощью out
.
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
//read client input
//multi line
//https://stackoverflow.com/questions/43416889/java-filereader-only-seems-to-be-reading-the-first-line-of-text-document?newreg=2f77b35c458846dbb1290afce8853930
String line = "";
while((line =in.readLine()) != null) {
System.out.println(line);
out.println(line); // send Server response
}
System.out.println("is it here?");
@ талекс Затем вам нужно сообщить серверу, когда он должен выйти из цикла. Вы можете отправить специальную строку или что-то в этом роде.
Это прекрасно работает.
String line = "";
while((line =in.readLine()) != null) {
System.out.println(line);
if (line.equals("break") {
break;
}
}
Вам нужно закрыть сокет.