10

私のクライアントは Web ブラウザで、次の URL を使用して myserver にリクエストを送信します。 http://localhost

これはサーバー側のコードです。問題は、ServingThreadクラスの run メソッドにあります。

class ServingThread implements Runnable{
    private Socket socket ;

    public ServingThread(Socket socket){
        this.socket = socket ;
        System.out.println("Receives a new browser request from "
                      + socket + "\n\n");
    }

    public void run() {
        PrintWriter out = null ;

        try {
            String str = "" ;
            out = new PrintWriter( socket.getOutputStream() ) ;
            out.write("This a web-page.") ;
            // :-(
            out.flush() ;
            // :-(
            socket.close() ;
            System.out.println("Request successfully fulfilled.") ;
        } catch (IOException io) {
            System.out.println(io.getMessage());
        }
    }
}

私が使用しているかどうか

out = new PrintWriter( socket.getOutputStream(), true ) ;

また

out = new PrintWriter( socket.getOutputStream() ) ;

出力はブラウザに送られません。ストリームを使用して手動でフラッシュしている場合にのみ、出力がブラウザーに送信されます

out.flush() ;

私の質問: new PrintWriter( socket.getOutputStream(), true )出力バッファを自動的にフラッシュすることになっていますが、そうしていません。なんで?

4

1 に答える 1

24

Javadocから:

パラメーター:

out- 出力ストリーム
autoFlush- ブール値。true の場合、、、printlnまたはprintfメソッドformatは出力バッファをフラッシュします

write()出力バッファをフラッシュするとは言いません。代わりに使用してみてくださいprintln()。期待どおりにフラッシュするはずです。

于 2009-08-06T20:02:30.907 に答える