Mon client est un navigateur Web et envoie une demande à myserver en utilisant l’URL suivante: http://localhost
C’est le code côté serveur. Le problème réside dans la méthode d’exécution de la classe ServingThread
.
class ServingThread implements Runnable{ private Socket socket ; public ServingThread(Socket socket){ this.socket = socket ; System.out.println("Receives a new browser request from " + socket + "\n\n"); } public void run() { PrintWriter out = null ; try { Ssortingng str = "" ; out = new PrintWriter( socket.getOutputStream() ) ; out.write("This a web-page.") ; // :-( out.flush() ; // :-( socket.close() ; System.out.println("Request successfully fulfilled.") ; } catch (IOException io) { System.out.println(io.getMessage()); } } }
Si j’utilise
out = new PrintWriter( socket.getOutputStream(), true ) ;
ou
out = new PrintWriter( socket.getOutputStream() ) ;
la sortie ne parvient pas au navigateur. La sortie ne parvient au navigateur que si je purge manuellement à l’aide de stream à l’aide de
out.flush() ;
Ma question: new PrintWriter( socket.getOutputStream(), true )
est censé vider automatiquement le tampon de sortie, mais ce n’est pas le cas. Pourquoi?
Des Javadocs :
Paramètres:
out
– Un stream de sortie
autoFlush
– Un booléen; si true, les méthodesprintln
,printf
ouformat
vont vider le tampon de sortie
Cela ne dit pas que write()
videra le tampon de sortie. Essayez d’utiliser println()
place et il devrait se dérouler comme prévu.