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 :
- package socket_serveur;
- //~--- JDK imports ------------------------------------------------------------
- import java.io.*;
- import java.net.*;
- /**
- *
- * @author Furil
- */
- public class Socket_Serveur {
- /**
- * @param args the command line arguments
- */
- public static void main(String[] args) {
- // TODO code application logic here
- ServerSocket ecoute = null;
- try {
- ecoute = new ServerSocket(Integer.parseInt(args[0]));
- } catch (IOException e) {
- System.err.println("Impossible d'ecouter sur le port indiqué" );
- System.exit(1);
- }
- Socket client = null;
- while (true) {
- try {
- client = ecoute.accept();
-
- Thread fils = new Thread(new Application(client)); // l'erreur se trouve ici no suitable thread for application //
- System.out.println("Thread " + fils.getName() + "cree" );
- fils.start();
- } catch (IOException e) {
- System.err.append("Erreur d'accept()'." );
- System.exit(1);
- }
- }
- }
- }
|
et la classe Application :
Code :
- package socket_serveur;
- import java.io.*;
- import java.net.*;
- import java.util.regex.*;
- /**
- *
- * @author Furil
- */
- public class Application {
-
- Socket client;
- Application(Socket client) throws SocketException{
- this.client = client;
- }
-
- //Corps de l'appli
-
- public void run(){
- try {
- BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream(), "8859_1" ));
- OutputStream out = client.getOutputStream();
- PrintWriter pout = new PrintWriter(new OutputStreamWriter(out,"8859_1" ),true);
-
- //lire la requete HTTP dnas la socket
-
- String requete = in.readLine();
- System.out.println("Requete:"+requete);
-
- //Filtrage de la requete grace a l'expression reguliere
-
- Matcher get = Pattern.compile("GET (/?\\S*).*" ).matcher(requete);
-
- //traitement de la requete aprés filtrage
-
- if(get.matches()){
- requete = get.group(1);
- if(requete.endsWith("/" ) || requete.equals("" ))
- requete = requete + "index.html";
-
- //envoie du fichier par bloc
-
- try{
- FileInputStream fis = new FileInputStream(requete);
- byte [] data = new byte [64*1024];
-
- for(int read = 0;(fis.read(data))> -1;){
- out.write(data,0,read);
- out.flush();
- }
-
- } catch(FileNotFoundException e){
- pout.println("Objet non trouve" );
- }
- }else
- pout.println("requete erronee" );
- client.close();
-
-
-
- } catch(IOException e){
-
- System.out.print("Erreur E/S"+e);
-
- }
- }
-
-
- }
|
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