Salut,
J'ai un petit (mais alors tout petit) serveur HTTP en Java dont voici un bout de code:
Code :
- try{
- ServerSocket ss = new ServerSocket(2511);
- while(true) {
- Socket s = ss.accept();
- BufferedReader br = new BufferedReader( new InputStreamReader(s.getInputStream()));
- String str = br.readLine();
- while(!str.equals("" )) {
- System.out.println(str);
- str = br.readLine();
- }
- new Page(s).start();
- }
- }
- catch(IOException e) {System.out.println(e);}
|
et voici le code de la classe page :
Code :
- private class Page extends Thread {
- Socket s;
-
- public Page(Socket s) {
- this.s = s;
- }
-
- public void run() {
- try{
- PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
- Calendar c = Calendar.getInstance();
- String date = c.get(c.DAY_OF_MONTH) + "/" + c.get(c.MONTH) + "/" + c.get(c.YEAR);
- String content = getContent();
- pw.print("HTTP/1.1 200 OK\r\nContent-length : "+content.length()+"\r\nDate : "+date+"\r\nContent-Type : text/html\r\n\r\n" );
- pw.print(content);
- pw.flush();
- }
- catch(Exception e) {System.out.println(e);}
- }
|
Et j'ai quelques petits problèmes :
- si je ferme le socket apres l'envoi des données (ou meme le printWriter), le navigateur dit que le document est vide ("Document contains no data" sous Mozilla, erreur DNS sous IE) pourtant ca doit bouffer carrément en ressources
- de plus, bien que ce serveur soit multi processus, je ne peux pas consulter plusieurs fois la page en meme temps (temps de réponse infini, sauf si j'arrete un chargement, un autre se finit - tres louche!)
- et enfin, lors de la réception de la requete du navigateur, si je fait un while(str!=null) a la place de while(!str.equals("" )), br.readLine() rentre dans une boucle infinie a un moment donné.
Voila, beaucoup de problèmes pour ce tout petit bout de code quand meme!
Je remercie d'avance toutes les personnes m'aidant dans cette tache.
Message édité par yo c spi le 03-02-2004 à 15:49:12