gpt4 book ai didi

java - 输入/输出代码执行(首先执行的是客户端还是服务器?)

转载 作者:行者123 更新时间:2023-11-30 05:39:02 25 4
gpt4 key购买 nike

我们刚刚开始研究IO代码,有一点我不明白这个问题:这是服务器代码:

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?

这些问题看似简单,但它们并不能让我理解更困难的代码。

最佳答案

简单来说就是因为readLine()accept()blocking

“在计算中,进程是正在执行的计算机程序的一个实例。进程总是以一种进程状态存在。被阻塞的进程是正在等待某个事件的进程,例如资源变得可用或 I/O 操作完成

程序将卡在readline()处,直到到达换行符或流末尾,就像在服务器上调用accept()时一样,它会挂起直到客户端连接.

编辑:Here is another explanation with focus on network sockets .

关于java - 输入/输出代码执行(首先执行的是客户端还是服务器?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56049641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com