Я создал PrintWriter с включенной автозаполнением; почему это не автозапуск?
Мой клиент является веб-браузером и отправляет запрос на myserver, используя этот URL: http://localhost
Это код на стороне сервера. Проблема заключается в методе запуска ServingThread
учебный класс.
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 )
должен автоматически очищать буфер вывода, но это не так. Зачем?
1 ответ
Из Javadocs:
Параметры:
out
- выходной потокautoFlush
- логическое значение; если это правда,println
,printf
, или жеformat
методы очистят буфер вывода
Это не говорит о том, что write()
очистит буфер вывода. Попробуйте использовать println()
вместо этого, и он должен вспыхнуть, как вы ожидаете.