Проблемы с сервером HTTP

Привет, ребята, у меня есть очень простой http-сервер, кодированный за 30 минут для выполнения задания, и я столкнулся с очень странной проблемой. Нам было предложено использовать только BufferedOutputStream вместо StreamWriter, поскольку очевидно, что существует проблема с использованием PrintWriters, поскольку они работают по-разному на разных платформах. Я в замешательстве, так как у меня есть следующий метод println...

private void println(BufferedOutputStream bos, String s) throws IOException {
    String toPrint = s + "\r\n";
    byte[] array = toPrint.getBytes();
    for (int i = 0; i < array.length; i++) {
        bos.write(array[i]);
    }
    return;
}

Я запутался как при использовании

println(outStream,"HTTP/1.1 200 OK");
println(outStream,"");
println(outStream,"Hello World");

на веб-странице написано, что я не отправлял никаких данных, но использую...

writer.println("HTTP/1.1 200 OK");
writer.println("");
writer.println("Hello World");

все выглядит отлично.. я попробовал несколько вещей, таких как очистка outStstream, но я не понимаю, почему это не сработает

Спасибо за помощь

2 ответа

Решение

Вы сбросили и закрыли свой BufferedOutputStream после записи всех данных?

private void println(BufferedOutputStream bos, String s) throws IOException {
    String toPrint = s + "\r\n";
    byte[] array = toPrint.getBytes();
    for (int i = 0; i < array.length; i++) {
        bos.write(array[i]);
    }
    return;
}

Вам не нужно все это. На самом деле вам ничего не нужно. Просто позвони bos.write((s+"\r\n").getBytes()) непосредственно из того места, куда вы звоните, а затем сбросьте его, когда написали все, что нужно для записи.

Обратите внимание, что в HTTP 1.1 вы должны либо закрыть BufferedOutputStream или предоставить Content-length заголовок (или использовать кодирование передачи по частям).

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