HTTP 服务器问题

HTTP Server issues

大家好,我有一个非常基本的 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,但我不明白为什么它不起作用

感谢您的帮助

您是否在写入所有数据后刷新并关闭了 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 header(或使用分块传输编码)。