Проблемы с сервером 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
заголовок (или использовать кодирование передачи по частям).