Из PrintWriter
документов :
... если включена автоматическая очистка, это будет сделано только при вызове одного из методов println
, printf
или format
...
Ваш сервер вызывает print()
и никогда не сбрасывает поток, поэтому время никогда не отправляется. Либо вызовите println()
, либо явно очистите поток.
Кроме того, сервер закрывает соединение сразу после отправки времени, поэтому второй запрос клиента всегда завершается неудачей ...
Редактировать: здесь есть интересная особенность - закрытие PrintWriter
должно , чтобы очистить его (см. Спецификации Writer
), но из-за в порядке операций то, что кажется происходящим вместо этого:
in.close()
закрывает базовый Socket
out.close()
будет сбрасывать записанные данные, но не может (поскольку сокет теперь закрыт) * 1039 *
Не уверен, что это именно то, что происходит, но изменение порядка этих двух операторов меняет поведение, по-видимому, давая out.close()
шанс сбросить ...