HTTP服务器问题

时间:2016-08-06 04:51:32

标签: java http server bufferedoutputstream

大家好,我有一个非常基本的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 个答案:

答案 0 :(得分:1)

写完所有数据后,你是否已刷新并关闭了BufferedOutputStream?

答案 1 :(得分:0)

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标头(或使用分块传输编码)。