ソケットを使用してHTTPサーバーを構築しようとしていますが、私は奇妙な問題が発生しました。すべて正常に動作するようですが、私はHTMLファイルやtxtファイルを取得するために私のブラウザを使用するとき、私は最後の文字を取得しません。HTTPサーバーが出力ストリームの最後の文字を送信しない
たとえば、かなり標準的なテスト用の.htmlファイルがあります。このファイルは、</html>
の後に正確に終わるので、ブラウザはファイル全体を取得しますが、最後は</html
で終わります。
画像は、破損しているように見えますが、これは以前の問題に関連していると思われます。
コードは以下の通りです:
printWriter.println(
this.getStatusLineFromStatusCode(statusCode) + CRLF
+ "Date: " + currentTime + CRLF
+ "Server: Definitely not Apache" + CRLF
+ ((statusCode == 200) ?
"Last-Modified: " + lastModified + CRLF : "")
+ "Content-Length: " + dir.length() + CRLF
+ "Content-Type: " + fileType + CRLF + CRLF
);
if(request.get("requestMethod").equals("GET")
&& dir.exists() && dir.isFile()) {
FileInputStream in = null;
try {
System.out.println(dir.getPath());
in = new FileInputStream(dir.getPath());
int c;
while((c = in.read()) != -1) {
outputStream.write(c); // Here is the write operation
}
} catch(Exception e) {
System.out.println(e);
} finally {
if(in != null) {
in.close();
}
}
}
printWriter.close();
私は、書き込みが発生した部分をコメントしました。 FileOutputStreamを使用して、ディスク内の他の場所に同時にファイルをコピーすると、ファイルが正しくコピーされるため、本当に変です。
誰もがなぜこれが起こっているのか分かりませんか?
これは役立つかもしれないが? http://stackoverflow.com/a/51753/7491770 – ram
@ram残念ながら私は 'IOUtils'を使用できません – Flerex
出力ストリームを閉じる前にフラッシュしてください。 –