ソケットを使用してhttpserverを作成しようとしていますが、この問題が発生します。 誰もが知っているように、Httpリクエストはこのようなものです。JavaでフルHTTPリクエストを取得する方法
GET /index.html HTTP/1.1
Cache-Control: max-age=0
Host: 127.0.0.1
Accept:xxxxx
User-Agent: xxxx
Connection: keep-alive
CRLF
This is message body!
メッセージ本体を含めた完全なHttpリクエストを取得するにはどうすればよいですか。 こう書いてみました。私はこの
ServerSocket serverSocket = new ServerSocket(8000);
while (true) {
Socket socket = serverSocket.accept();
new Thread() {
{
InputStream is = socket.getInputStream();
BufferedReader input = new BufferedReader(new InputStreamReader(is));
String line = null;
while (input.ready()) {
line = input.readLine();
System.out.println(line);
}
System.out.println("finish");
}
}.start();
}
物事のように変更さ.Then
ServerSocket serverSocket = new ServerSocket(8000);
while (true) {
Socket socket = serverSocket.accept();
new Thread() {
{
InputStream is = socket.getInputStream();
BufferedReader input = new BufferedReader(new InputStreamReader(is));
String line = null;
while ((line = input.readLine()) != null) {
System.out.println(line);
}
System.out.print("finish");
}
}.start();
}
とコンソールは、私たちは「仕上げ」を見ることができる方が良いに行く「完了」を印刷することはありません!しかし、私は少し早くページをリフレッシュする場合。バッファーリーダーは準備ができていないし、中に取得しないで{}!
私はすべてのrerquestと "仕上げ"
を印刷したい私を助けてください。 ありがとうございました!
ストリームは、クライアントが接続を閉じるときにのみ終了します。要求は同じ接続上で次の要求を送信したいので、接続を生きたままにすることであるので、それをしません。長さのヘッダに基づいてループを書くべきです(ほとんどのGETリクエストはリクエストボディを送信しません)。 – RealSkeptic
'httpserver throw socket'は無意味です。あなたが何を求めているのか不明です。 – EJP
@EJP彼は "スルー"を意味しました – Malt