0
我真的一直在努力解決這個問題約一個小時,但我根本無法找到它的解決方案。掃描器無限循環導致瀏覽器掛起
請看下面的代碼:
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)連接到本地主機,它會掛到永遠。我必須按下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();
}
}
}
}
什麼是'在'和它在哪裏設置? – Zutty 2013-03-07 16:23:38
爲了儘快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。這個代碼是在一個applet中運行的嗎? – 2013-03-07 16:29:14
我認爲它永遠不會退出,因爲它永遠找不到和'EOF'。你應該搜索'\ r \ n \ r \ n'來知道請求結束的地方。 – 2013-03-07 16:36:56