簡體   English   中英

掃描程序無限循環導致瀏覽器掛起

[英]Scanner infinite loop causes browser to hang

我確實已經嘗試解決這個問題大約一個小時了,但是我根本找不到解決方案。

看下面的代碼:

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 ,它將永遠掛起。 我必須按Escape鍵(強制其停止請求)才能實際接收從其請求派生的所有輸入行。

這個想法很簡單; 如果請求中有下一行,則直接進入該行直到沒有剩余內容,然后發送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標頭。 然后,接收端確切地知道要讀取多少字節的內容。 這樣可以避免所有混亂的“讀到EOF”或“直到我發現\\ r \\ n \\ r \\ n”問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM