J'essaye de construire un serveur HTTP en utilisant des sockets mais je suis venu avec un problème étrange. Tout semble bien fonctionner mais quand j'utilise mon navigateur pour obtenir un fichier html ou un fichier txt, je n'obtiens pas le dernier caractère. Par exemple, j'ai un fichier de test .html plutôt standard. Ce fichier se termine exactement après </html>
afin que le navigateur obtienne l'ensemble du fichier mais se terminant par </html
. Comme les images, ils semblent être corrompus mais je suppose que c'est quelque chose lié au problème précédent.Le serveur HTTP n'envoie pas le dernier caractère dans un flux de sortie
Le code est le suivant:
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();
Je commente la partie où l'écriture se produit. C'est vraiment bizarre parce que si j'utilise un FileOutputStream pour copier en même temps le fichier ailleurs sur mon disque, le fichier est copié correctement.
Est-ce que quelqu'un sait pourquoi cela se produit-il?
peut cette aide? http://stackoverflow.com/a/51753/7491770 – ram
@ram Malheureusement je ne peux pas utiliser 'IOUtils' – Flerex
Vider le flux de sortie, avant de le fermer. –