私は実際にこの問題を約1時間解決しようとしていますが、解決策を見つけることができません.
以下のコードを見てください。
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 は in がどこにあるのか尋ねました:
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();
}
}
}
}