Mini serveur HTTP

Mini serveur HTTP - Java - Programmation

Marsh Posté le 03-02-2004 à 15:48:26    

Salut,  
 
J'ai un petit (mais alors tout petit) serveur HTTP en Java dont voici un bout de code:

Code :
  1. try{
  2.             ServerSocket ss = new ServerSocket(2511);
  3.             while(true) {
  4.                 Socket s = ss.accept();
  5.                 BufferedReader br = new BufferedReader( new InputStreamReader(s.getInputStream()));
  6.                 String str = br.readLine();
  7.                 while(!str.equals("" )) {
  8.                     System.out.println(str);
  9.                     str = br.readLine();
  10.                 }
  11.                 new Page(s).start();
  12.             }
  13.         }
  14.         catch(IOException e) {System.out.println(e);}


et voici le code de la classe page :

Code :
  1. private class Page extends Thread {
  2.         Socket s;
  3.        
  4.         public Page(Socket s) {
  5.             this.s = s;
  6.         }
  7.        
  8.         public void run() {
  9.             try{
  10.                 PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
  11.                 Calendar c = Calendar.getInstance();
  12.                 String date = c.get(c.DAY_OF_MONTH) + "/" + c.get(c.MONTH) + "/" + c.get(c.YEAR);
  13.                 String content = getContent();
  14.                 pw.print("HTTP/1.1 200 OK\r\nContent-length : "+content.length()+"\r\nDate : "+date+"\r\nContent-Type : text/html\r\n\r\n" );
  15.                 pw.print(content);
  16.                 pw.flush();
  17.             }
  18.             catch(Exception e) {System.out.println(e);}
  19.         }


 
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
Reply

Marsh Posté le 03-02-2004 à 15:48:26   

Reply

Marsh Posté le 03-02-2004 à 15:51:01    

Pour ta première question, oublie pas de fermer ton PrintWriter via pw.close() :o
Pour les autres, je sais pas trop :D


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 03-02-2004 à 16:15:01    

Manque des choses dans ton code
si tu veut essaye de te baser sur ce code la qui est déjà minimaliste
 
http://jfod.cnam.fr/csiml_b2/esiee [...] ttpd2.java
 
@+

Reply

Marsh Posté le 03-02-2004 à 16:33:46    

Une remarque : Tu peux tester ton petit serveur en faisant un "telnet @detonserveur portdetonserveur" sous dos et en tapant les commandes telles quelles.

Reply

Marsh Posté le 03-02-2004 à 16:34:59    

W3C jigsaw

Reply

Marsh Posté le 03-02-2004 à 18:12:36    

Taiche : si je ferme le printwriter, le browser refuse de charger la page (comme quand je ferme le socket)
therier : j'ai déja essayé, mais merci quand meme
Darklord : merci, je vais regarder ca.

Reply

Marsh Posté le 04-02-2004 à 10:19:53    

Je suis pas forcément très réveillé, mais ça me semble normal pour l'histoire des blocages multiprocessus... tu fais un readLine dans le corps du main, donc il attend de traiter ta requete avant de réellement passer le socket au processus Page.
 
-> fais ton s = ss.accept(), puis directement new page(s).start(), et ton traitement avec le readline mets le dans le processus détaché...


---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)
Reply

Marsh Posté le 19-01-2009 à 09:14:04    

Salut, j'ai egalement realise un server http multithread en java. Le code source peut peut etre t'aider.


Message édité par mTex le 19-01-2009 à 09:15:12
Reply

Marsh Posté le 19-01-2009 à 09:18:07    

joli , tu gagne un point pelle pour avoir déterrer un sujet de 2004


---------------

Reply

Marsh Posté le 19-01-2009 à 10:41:24    

spam... C'est la mode ces temps


Message édité par jagstang le 19-01-2009 à 10:41:38

---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed