Я внедряю программное обеспечение на стороне клиента, которое позволяет пользователю вводить команды, отправлять их на сервер, сервер интерпретирует их и отправляет результат клиенту.Вот где я застрял, у меня есть цикл while, который получает ответы от сервера до тех пор, пока не закончится соединение.
try(Socket socket = new Socket(hostname, port);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))){
System.out.println("Connected to " + hostname + ":" + port + " !");
Scanner scanner = new Scanner(System.in);
String command = scanner.nextLine();
String fromServer = null;
int status;
HashMap<String, String> response;
long start = 0;
System.out.println("C:" + command);
if (command.toLowerCase().equals("exit")) return;
out.println(command);
if (command.toLowerCase().equals("shutdown")) return;
out.println();
while ((fromServer = in.readLine()) != null) {
// Here's my problem
response = parseResponse(fromServer);
if (response.containsKey("response")) response.put("response", response.get("response").replaceAll("\\\\n", "\n"));
try {
status = Integer.parseInt(response.get("status"));
} catch (NumberFormatException e){
status = Status.RESPONSE_CORRUPTED;
}
System.out.println("S:" + status + (response.get("response") != null ? "\n" + response.get("response") : ""));
command = scanner.nextLine();
System.out.println("C:" + command);
out.println(command);
}
} catch (IOException e){
System.out.println("Server isn't connected, try again later.");
}
Реальная проблема заключается в том, что мне нужно поставить
if (command.toLowerCase().equals("exit")) return;
out.println(command);
if (command.toLowerCase().equals("shutdown")) return;
out.println();
передкакое-то время, так что в коде есть три out.println (), в то время как один будет более «логичным», и мне нужно указать
if (command.toLowerCase().startsWith("shutdown") && fromServer.equalsIgnoreCase("0") || status == Status.RESPONSE_CORRUPTED) break;
, в то время как клиент останавливается непосредственно при отправке команды shutdown(для выключения сервера), чтобы пользователь не мог ввести другую команду.Я ищу более эффективный способ управления командами и добавления команды ping (но мне нужно добавить if перед выключением), возможно, использую больше ООП, но я не вижу, как это сделать.