2016-08-06 52 views
0

Hallo Leute, ich habe einen sehr einfachen HTTP-Server in etwa 30 Minuten für eine Aufgabe codiert und bin auf ein sehr seltsames Problem gestoßen. Wir haben angegeben, dass nur BufferedOutputStream anstelle von StreamWriter verwendet werden sollte, da es offensichtlich ein Problem bei der Verwendung von PrintWriters gibt, da sie auf verschiedenen Plattformen unterschiedlich funktionieren. Ich bin verwirrt, wie ich die follwoing println Methode haben ...HTTP Server Probleme

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; 
} 

Ich bin verwirrt, wie wenn

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

die Webseite mit sagt, ich habe keine Daten gesendet, aber mit ...

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

alles scheint perfekt .. ive ein paar Dinge, wie das Spülen der outStstream versucht, aber ich verstehe nicht, warum es gewohnt

arbeiten 210

Danke für die Hilfe

Antwort

1

Haben Sie Ihren BufferedOutputStream geleert und geschlossen, nachdem Sie alle Daten geschrieben haben?

+0

hatte ich nicht, haha ​​danke für deine Hilfe :) –

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; 
} 

Sie brauchen nicht alles. In der Tat brauchen Sie nichts davon. Ruf einfach bos.write((s+"\r\n").getBytes()) von überall an, wo du es anrufst, und spüle es dann, wenn du alles geschrieben hast, was du schreiben musst.

Beachten Sie, dass Sie in HTTP 1.1 entweder die BufferedOutputStream schließen oder einen Content-length Header (oder chunked Transfer-Codierung) bereitstellen müssen.