8

次のコードを使用して、コアJavaを使用して入力ストリームからHTTPリクエストデータを読み取ろうとしています。

BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            String inputLine;
            while ((inputLine = in.readLine()) != null)
                System.out.println(inputLine);
            in.close();

ヘッダーは正常に受信されますが、サーバーが要求の「EOF」を検出しないため、クライアントは永久にハングします。これをどのように処理しますか?私はこの質問がかなり尋ねられるのを見てきました、そしてほとんどの解決策は上記のようなものを含みます、しかしそれは私にとってはうまくいきません。クライアントとしてcurlとWebブラウザーの両方を使用して、getリクエストを送信してみました

アイデアをありがとう

4

2 に答える 2

16

HTTPリクエストは、EOFではなく、空白行(オプションでフォームデータやファイルアップロードなどのリクエストデータが続く)で終了します。あなたはこのようなものが欲しいです:

BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while (!(inputLine = in.readLine()).equals(""))
    System.out.println(inputLine);
in.close();
于 2012-08-16T03:41:53.433 に答える
4

上記の回答に加えて (まだコメントを投稿できないため)、Opera のようないくつかのブラウザーを追加したいと思います (それが原因だったのか、それとも私の SSL 設定だったのか、わかりません) ) EOF を送信します。そうでない場合でも、NullPointerException が原因でサーバーがクラッシュしないようにする必要があります。

それを避けるには、次のように null テストを条件に追加します。

while ((inputLine = in.readLine()) != null && !inputLine.equals(""));
于 2016-03-23T21:28:48.543 に答える