Java Socket OutputStream не сбрасывается - PullRequest
3 голосов
/ 05 февраля 2010

Я пишу сервер на основе сокетов в Java. Клиент подключается к нему (веб-браузер), а сервер отправляет обратно простой HTML-код и устанавливает cookie для распознавания при следующем подключении клиента к нему. Я использую PrintStream для записи в сокет, но сброс не работает. Единственный способ, которым я могу сбросить, - это использовать shutdownoutput или close и закрывать поток сокетов. Но я не хочу этого, потому что я читаю / пишу в него несколько раз в нескольких местах кода. Что можно сделать? Не удалось получить какую-либо помощь от тегов. Я также пробовал другие буферизованные классы писателей, та же проблема.

Ответы [ 2 ]

4 голосов
/ 25 февраля 2010

Ах да, глупая проблема, вам просто нужно использовать pstream.writeln (""); поскольку breader.readLine () читает, пока не найдет символ '\ n'. так что write () не будет работать.

0 голосов
/ 25 февраля 2010

Я бы попробовал вызвать этот метод вместо flush:

public boolean checkError()
Returns:
    True if and only if this stream has encountered an IOException other than InterruptedIOException, or the setError method has been invoked

Посмотрите, не происходит ли сбой по какой-либо причине сброса (checkError вызывает внутреннюю очистку и запоминает состояние ошибки).

Также стоит попробовать подключиться к серверу с помощью telnet и посмотреть, возвращаются ли данные немедленно, или написать простую программу-сокет Java-клиента для проверки (вырезать / вставить одну из сети).

Возможно, браузер решил сознательно дождаться большего ввода, прежде чем отображать ваш html (особенно, если html сформирован не полностью). Кажется, я помнил, что сам сталкивался с этой проблемой в прошлом.

...