Мы только начали изучать коды ввода-вывода, и есть определенный момент, я не понимаю этой проблемы: Вот код сервера:
public final class SuccServer {
public static void main(String[] args) {
try (ServerSocket s0 = new ServerSocket(5108);
Socket s = s0.accept();
BufferedReader r =
new BufferedReader(
new InputStreamReader(s.getInputStream(),
US_ASCII));
BufferedWriter w =
new BufferedWriter(
new OutputStreamWriter(s.getOutputStream(),
US_ASCII))) {
int i = Integer.parseInt(r.readLine());
int i1 = i + 1;
w.write(String.valueOf(i1));
w.write('\n');
w.flush();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
}
А вот код клиента:
public final class SuccClient {
public static void main(String[] args) {
try (Socket s = new Socket("localhost", 5108);
BufferedReader r =
new BufferedReader(
new InputStreamReader(s.getInputStream(),
US_ASCII));
BufferedWriter w =
new BufferedWriter(
new OutputStreamWriter(s.getOutputStream(),
US_ASCII))) {
int i = 2019;
w.write(String.valueOf(i));
w.write('\n');
w.flush();
int succ = Integer.parseInt(r.readLine());
System.out.printf("succ(%d) = %d%n", i, succ);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
}
Сначала устанавливается соединение, поэтому accept () создает сокет, затем я не понимаю, как будет работать код (в хронологическом порядке), почему клиентская инструкция
w.write(String.valueOf(i));
выполняется первойа не
int i = Integer.parseInt(r.readLine());
сервера, и почему после записи 2019 клиент ожидает ответа сервера?он мог бы просто продолжить код, выполнив
int succ = Integer.parseInt(r.readLine());
, не дожидаясь, пока сервер ответит ему 2020?
Эти вопросы могут показаться простыми, но они не позволяют мне понять более сложный код.