gpt4 book ai didi

java - 扫描仪无限循环导致浏览器挂起

转载 作者:行者123 更新时间:2023-12-01 14:47:30 26 4
gpt4 key购买 nike

我已经尝试解决这个问题大约一个小时了,但我就是找不到解决方案。

看下面的代码:

public void handleRequest() throws IOException {
while(in.hasNextLine()) {
System.out.println(in.nextLine());
}

out.print("HTTP/1.0 200 OK\r\n\r\ntest");
out.flush();
}

如果我将浏览器 (Chrome) 连接到 localhost,它将永远挂起。我必须按转义键(强制它停止请求)才能实际接收从其请求派生的所有输入行。

这个想法很简单;如果请求有下一行,则继续该行直到没有剩余,然后发送 200 OK 响应。但这根本不起作用。

编辑:

@Zutty 询问位于何处:

public class HttpServer {
public static final int PORT = 80;
public static final int BACKLOG = 1;
public static final String ROOT_CATALOG = "C:/HttpServer/";

private ServerSocket server;
private Socket client;
private Scanner in;
private PrintWriter out;

private FileInputStream fstream;
private final String TWOHUNDRED = "HTTP/1.0 200 OK\r\n"
+ "Content-Type: text/html\r\n"
+ "\r\n";

public HttpServer() throws IOException {
server = new ServerSocket(PORT, BACKLOG);
}

public Socket accept() throws IOException {
client = server.accept();
in = new Scanner(client.getInputStream());
out = new PrintWriter(client.getOutputStream());

return client;
}

在主要部分:

public class Main {
public static void main(String[] args) throws IOException {
HttpServer server = new HttpServer();

while(true) {
try(Socket client = server.accept()) {
server.handleRequest();
}
}
}
}

最佳答案

如果您使用 HTTP,您应该始终发送 Content-Length header 。那么接收端就确切地知道要读取多少字节的内容。这避免了所有困惑的“读取直到 EOF”或“直到我找到\r\n\r\n”问题。

关于java - 扫描仪无限循环导致浏览器挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15276306/

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