Java Socket OutputStream не сбрасывается

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

2 ответа

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

Я бы попробовал вызвать этот метод вместо 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 сформирован не полностью). Кажется, я помнил, что имел эту проблему сам в прошлом.

Другие вопросы по тегам