Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1597 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Serveur web java multithread

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Serveur web java multithread

n°2178672
furil
Posté le 04-03-2013 à 17:49:40  profilanswer
 

Bonjour, voilà je dois mettre en place un client qui va faire une requête http, un proxy qui va rediriger la requête du client sur le port 8000 et le serveur web qui doit lui répondre. J'ai réussi à faire un client autonome (il faire la requête http et récupère le résultat dans un fichier .html). J'attaque donc maintenant le serveur web mais j'ai des problèmes au niveau de l'objet Thread donc voici l'erreur : no suitable thread for Application.
Je m'explique le serveur web se divise en 2 script :  
 
- Le 1er Socket_Serveur.java : créer une socket d'ecoute sur un port donné (8000 est un exemple :)) une fois la requête reçu, le serveur va créer un Thread après avoir accepter la connexion et faire appel à la classe Application.
 
- Application.java : cette classe va permettre au serveur de trier la requête http et envoyer bloc par bloc la réponse à la requête http.
 
Pour faire simple :  
 
- le client on va lui créer une requête http static : www.google.fr:80
- le proxy va rediriger la requête sur le port 8000 (port d'ecoute du serveur web)
- le serveur répond au proxy, ce dernier va stocker la réponse dans un fichier html et l'envoyer au client
 
Mon problème : Le Thread
 
voilà les 2 scripts :
 
Socket_Serveur.java :

Code :
  1. package socket_serveur;
  2. //~--- JDK imports ------------------------------------------------------------
  3. import java.io.*;
  4. import java.net.*;
  5. /**
  6. *
  7. * @author Furil
  8. */
  9. public class Socket_Serveur {
  10.     /**
  11.      * @param args the command line arguments
  12.      */
  13.     public static void main(String[] args) {
  14.         // TODO code application logic here
  15.         ServerSocket ecoute = null;
  16.         try {
  17.             ecoute = new ServerSocket(Integer.parseInt(args[0]));
  18.         } catch (IOException e) {
  19.             System.err.println("Impossible d'ecouter sur le port indiqué" );
  20.             System.exit(1);
  21.         }
  22.         Socket client = null;
  23.         while (true) {
  24.             try {
  25.                 client = ecoute.accept();
  26.                
  27.                 Thread fils = new Thread(new Application(client));   //  l'erreur se trouve ici no suitable thread for application //
  28.                 System.out.println("Thread " + fils.getName() + "cree" );
  29.                 fils.start();
  30.             } catch (IOException e) {
  31.                 System.err.append("Erreur d'accept()'." );
  32.                 System.exit(1);
  33.             }
  34.         }
  35.     }
  36. }


 
 
et la classe Application :
 

Code :
  1. package socket_serveur;
  2. import java.io.*;
  3. import java.net.*;
  4. import java.util.regex.*;
  5. /**
  6. *
  7. * @author Furil
  8. */
  9. public class Application {
  10.    
  11.     Socket client;
  12.     Application(Socket client) throws SocketException{
  13.         this.client = client;
  14.     }
  15.    
  16.     //Corps de l'appli
  17.    
  18.     public void run(){
  19.         try {
  20.             BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream(), "8859_1" ));
  21.             OutputStream out = client.getOutputStream();
  22.             PrintWriter pout = new PrintWriter(new OutputStreamWriter(out,"8859_1" ),true);
  23.            
  24.             //lire la requete HTTP dnas la socket
  25.            
  26.             String requete = in.readLine();
  27.             System.out.println("Requete:"+requete);
  28.            
  29.             //Filtrage de la requete grace a l'expression reguliere
  30.            
  31.             Matcher get = Pattern.compile("GET (/?\\S*).*" ).matcher(requete);
  32.            
  33.             //traitement de la requete aprés filtrage
  34.            
  35.             if(get.matches()){
  36.                 requete = get.group(1);
  37.                 if(requete.endsWith("/" ) || requete.equals("" ))
  38.                     requete = requete + "index.html";
  39.                
  40.                 //envoie du fichier par bloc
  41.                
  42.                 try{
  43.                     FileInputStream fis = new FileInputStream(requete);
  44.                     byte [] data = new byte [64*1024];
  45.                    
  46.                     for(int read = 0;(fis.read(data))> -1;){
  47.                         out.write(data,0,read);
  48.                         out.flush();
  49.                     }
  50.                        
  51.                 } catch(FileNotFoundException e){
  52.                     pout.println("Objet non trouve" );
  53.                 }
  54.             }else
  55.                 pout.println("requete erronee" );
  56.             client.close();
  57.            
  58.                
  59.                
  60.             } catch(IOException e){
  61.                
  62.                 System.out.print("Erreur E/S"+e);
  63.            
  64.         }
  65.     }
  66.    
  67.    
  68. }


 
 
Bon après si j'ai fais trop compliqué n'hésitez pas à me conseiller, j'ai commencé java socket depuis peu ^^ donc je suis ouvert à toute solution :)
 
Merci et bonne soirée :)

mood
Publicité
Posté le 04-03-2013 à 17:49:40  profilanswer
 

n°2178684
devicenotr​eady
insert disk and retry
Posté le 04-03-2013 à 19:05:46  profilanswer
 

  • Tu tentes d'instancier un Thread en lui passant une Application. Ce constructeur n'existe pas. Par contre, un Runnable conviendrait
  • Thread, c'est vraiment bas niveau et old school
  • Je passe sur la gestion des exceptions et les différents buffers mal fermés, je suppose que tu débutes


---------------
http://devicenotready.com/ - Informatique et autres bizarreries
n°2178687
furil
Posté le 04-03-2013 à 19:26:50  profilanswer
 

Bonsoir devicenotready,
 
Tous d'abord merci de ta réponse. Ensuite oui je débute :) .
Concernant Application, dans Application.java, je précise qu'il aura en paramètre le socket client donc il est bien existant.
Après pour les exceptions et buffer mal fermés je vais regarder ça de plus près . :)
Ensuite Thread, je dois l'utiliser, ça m'est imposé ^^
En tout cas merci d'avoir pris le temps de répondre et bonne soirée :)

n°2182362
furil
Posté le 25-03-2013 à 21:32:29  profilanswer
 

Voilà après quelques modifications il me reste toujours une erreur(Au niveau de la classe Application) :
 

Code :
  1. byte[] data = new byte[64*1024]


 
Cette erreur disparaît lors de l'insertion d'un try/catch. Mais j'ai du mal le placé car il me dit d'utiliser finally au lieu du catch. voilà la partie du code :
 

Code :
  1. try{
  2.     FileInputStream fis = new FileInputStream(requete);
  3.     ByteArrayOutputStream bos = new ByteArrayOutputStream();
  4.     byte[] data = new byte[64*1024];
  5.    
  6.     for(int read; (read=fis.read(data)) > -1;)
  7.         out.write(data);
  8.         out.flush();
  9.    
  10.     }
  11.     catch{
  12.         (Exception e)
  13.         }
  14.         client.close();
  15.    
  16.    
  17.    
  18.        
  19. }
  20. }


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Serveur web java multithread

 

Sujets relatifs
Java Eclipse Classpath et ressources[JAVA/STRUST] problème d'encodage
Huffman [Java]Confirmation => WSDL uniquement sur Serveur
Choix du framework java pour un stage PFEconnection à une base Oracle sous java avec JDBC
Comment créer un dossier avec des espaces en Java sous Linux ?[java] Ligne qui bloque tout mon programme
petite question opérateurs en JAVA (dev. android)Outlook 2010- Affiche le serveur expediteur (Ret.path et From OK)
Plus de sujets relatifs à : Serveur web java multithread


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR