0

curl とほとんどの Web ブラウザを使用すると、クライアントが応答を読み取る前にサーバー コードが接続を閉じているようです。これが私のコードです

public void run() {
        try {
            InputStream input = clientSocket.getInputStream();
            OutputStream output = clientSocket.getOutputStream();
            System.out.println(input);

            // getRequestObject(input);
            long time = System.currentTimeMillis();
            output.write(("HTTP/1.1 200 OK\n\nWorkerRunnable: " + this.serverText + " - " + time + "").getBytes());
            output.flush();
            output.close();
            input.close();
            System.out.println("Request processed: " + time);
        } catch (IOException e) {
            // report exception somewhere.
            e.printStackTrace();
        }
    }

    protected String readInputStream(InputStream input) throws IOException {
        String inputLine;
        BufferedReader in = new BufferedReader(new InputStreamReader(input));
        StringBuilder sb = new StringBuilder();
        while (!(inputLine = in.readLine()).equals("")) {
            sb.append(inputLine);
        }
        return sb.toString();
    }

何かご意見は?

4

1 に答える 1

3

おそらく、クライアントのデータを読み取っていないことが問題の原因である可能性があります。クライアントは HTTP ヘッダーを送信しようとしていますが、すぐに応答の送信を開始します。InputStream空行 (リクエスト HTTP ヘッダーの終了を知らせる) を受け取るまでから読み取りを試みてから、出力の送信を開始します。

アプリケーションに HTTP サーバーを組み込む必要がある場合は、既存のライブラリを使用することを強くお勧めします。独自の HTTP 準拠サーバーを実装するのは面倒な作業です。見る

于 2012-08-16T07:03:21.600 に答える