gpt4 book ai didi

java - 为什么 serverSocket.accept() 只对一个请求执行多次

转载 作者:行者123 更新时间:2023-11-28 22:26:44 27 4
gpt4 key购买 nike

我正在学习 tomcat 的工作原理 这本书,发现了一个让我大吃一惊的东西。我将代码简化如下:

public class Boot {
public static void main(String[] args) {
ServerDemo server = new ServerDemo();
try {
server.start();
System.in.read();
}
catch (Exception e) {
e.printStackTrace();
}
}
}

public class ServerDemo implements Runnable {
private ServerSocket serverSocket = null;
public void run() {
while (true) {
Socket socket = null;
try {
socket = serverSocket.accept();
System.out.println("--receive request from client----"+
Thread.currentThread().getId());
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

public void start() {
try {
serverSocket = new ServerSocket(8080);
Thread thread = new Thread(this);
thread.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}

Boot 类是Main 类,用于启动此应用程序,ServerDemo 类是一个简化的服务器,它监听8080 端口,当来自浏览器 的请求到达时将打印信息。现在的问题是:我认为当我从浏览器发出请求时,它会执行

socket = serverSocket.accept();

然后打印信息仅一次,然后由于接受方法等待下一个请求,线程自身阻塞。

但是真正的是线程打印信息几次:(也许3,4..)关于一个请求。

这是一个执行:输入:

http://localhost:8080/index

输出:

--receive request from client----13
--receive request from client----13
--receive request from client----13

我的预期输出:

--接收客户端请求----编号

总结:我无法弄清楚一个请求为什么打印几次这意味着接受方法执行了几次。

最佳答案

这可能是您的浏览器尝试了一些不同的事情来让您做出响应,因为您刚刚关闭了它们的连接。尝试改用 curlwget。 – ug_

关于java - 为什么 serverSocket.accept() 只对一个请求执行多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41357240/

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