Need help sur la compilation d'un bloc JAVA

merry1marie Messages postés 8 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 12 avril 2012 - 7 avril 2012 à 15:29
merry1marie Messages postés 8 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 12 avril 2012 - 12 avril 2012 à 16:55
Bonjour

C'est ma première visite sur ce forum, il me parait très intérressant vu les expliccations simples et nettes que les membres utilisent pour répondre aux questions posées, donc je me suis dit qu'ici je peux trouver ce que m'aidera à accomplir mon projet..

Tout d'abords j'avoue que je suis ignare en java
et le code que je vais poster n'est pas le mien, mais j'en ai vraiment besoin..

mon projet consiste à réaliserun serveur HTTP simple qui sert à répondre à qlq requêtes envoyées par un cleint situé sur une autre machine, voici ce que j'ai trouvé..
ça c'est le premeir bloc:
import java.io.*;
import java.net.*;
import java.util.*;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.lang.*;


public class HttpServer
{
     public static void main(String [] args)
     {
          int i= 1;

System.out.println("********************************************************************************");
          System.out.println("******************************  HTTPSERVER ***********************************");

System.out.println("********************************************************************************");
          System.out.println("Server Started...");
          System.out.println("Waiting for connexions...");
          try
          {

               ServerSocket s = new ServerSocket(18000);
               for(;;)
               {
                    Socket incoming = s.accept();
                    System.out.println("New Client Connected wih id " + i +" from "+incoming.getInetAddress().getHostName() );
                    System.out.println(" ");
                    System.out.println(" REQUEST HEADER     ");
                    Thread t = new ThreadedServer(incoming,i);
                    i++;
                    t.start();
               }
          }
          catch(Exception e)
          {
               System.out.println("Error 1: " + e);
          }
     }
}

class ThreadedServer extends Thread
{
     final static String CRLF = "";
     Socket incoming;
     int counter;
     public ThreadedServer(Socket i,int c)
     {
          incoming=i;
          counter=c;
     }

     public void run()
     {
          try
          {
               String statusline=null;
               String contenttypeline=null;
               String contentlength=null;
               String venderline="Server: EXECUTER 1.1";
               String entitybody=null;
               BufferedReader in =new BufferedReader(new InputStreamReader(incoming.getInputStream()));
               PrintWriter out = new PrintWriter(incoming.getOutputStream(), true);
               OutputStream output=incoming.getOutputStream();
               String headerline;
               headerline=in.readLine();
               System.out.println(headerline + " headerLine");

           StringTokenizer s = new StringTokenizer(headerline);
           String meth = s.nextToken();
           System.out.println("METH:"+meth);
          
           if(meth.equals("GET")||meth.equals("POST"))
               {
                int dot1,dot2,fslash;
                String fname,ext,FileName;
                String url = s.nextToken();
                System.out.println("URL:"+url);
                dot1=url.indexOf('.');
                dot2=url.lastIndexOf('.');
        fslash=url.lastIndexOf('/');
        fname=url.substring(dot1+1,dot2);
        System.out.println("FNAME:"+fname);
                ext=url.substring(dot2,fslash);
                System.out.println("ext:"+ext);
                FileName=fname+ext;
                System.out.println("FNAME:"+FileName);
                if(ext.equals(".html")||ext.equals(".htm"))
                {
                 FileInputStream fis=null;
                 boolean filexists=true;
                 try
                   {
                    fis=new FileInputStream(FileName);
                   }
                 catch(FileNotFoundException e)
                   {
                    System.out.println("Exception: "+e.getMessage());
                    filexists=false;
                   }



                if(filexists)
                {
                 statusline=" HTTP/1.1 200 Ok"+CRLF;
                 contenttypeline="Content-Type: text/html "+CRLF;
                 contentlength="Content-Length:"+(new Integer(fis.available())).toString() + CRLF;
                }
                else
                {

       statusline = "HTTP/1.0 404 Not Found" + CRLF ;
       contenttypeline = "Content-Type: text/html"+CRLF ;
       entitybody = "<HTML>" +
             "<HEAD><TITLE>404 Not Found</TITLE></HEAD>" +
             " 404 File Not Found
 </HTML>" ;
                }

              System.out.println(" RESPONCE HEADER                                    ");

                System.out.println(statusline);
                System.out.println(venderline);
                System.out.println(contentlength);
                System.out.println(contenttypeline);

                 output.write(statusline.getBytes());
                 output.write(venderline.getBytes());
                 output.write(contentlength.getBytes());
                 output.write(contenttypeline.getBytes());
                 output.write(CRLF.getBytes());


                 if (filexists)
          {
         sendBytes(fis, output) ;
         fis.close();
          }
      else
          {
         output.write(entitybody.getBytes());
          }

                }
                else
               {
                 statusline  = "HTTP/1.0 400 Not Found" + CRLF ;
       contenttypeline =  "Content-Type: text/html"+CRLF ;
       entitybody = "<HTML>" +
             "<HEAD><TITLE>400</TITLE></HEAD>" + " 400 A malformed HTTP request is reived
 </HTML>";
               }

               }

                else
                 {
                  statusline  = "HTTP/1.0 400 Not Found" + CRLF ;
        contenttypeline =  "Content-Type: text/html"+CRLF ;
        entitybody = "<HTML>" + "<HEAD><TITLE>400</TITLE></HEAD>" + " 400 A malformed HTTP request is reived
 </HTML>";
                 }

         boolean done =false;
         while(!done)
         {
          headerline=in.readLine();
          if(headerline == null)
           done = true;
          else
          {
           System.out.println(headerline);
          }
         }

         incoming.close();
         in.close();
         out.close();
          }
          catch(Exception e)
          {
               System.out.println("Error 2 :  " + e);
          }
     }
private static void sendBytes(FileInputStream fis, OutputStream os)
   throws Exception
    {
   byte[] buffer = new byte[1024] ;
   int bytes = 0 ;

   while ((bytes = fis.read(buffer)) != -1 )
       {
      os.write(buffer, 0, bytes);
       }
    }


}


celui ci , c'est le deuxième :
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;


public class html {


public static void main(String[] args){

html test= new html();
Scanner sc = new Scanner(System.in);
System.out.println("Entrer l'adresse de votre page html");
String page = sc.nextLine();
String res = test.getIpFrom(page);
System.out.println(res);
}

    public static String getIpFrom(String adresse) {
     String toreturn = null;
     try {
     // creation d'un objet URL
     URL url = new URL(adresse);
     // on etablie une connection a cette url
     URLConnection uc = url.openConnection();
     // on y cree un flux de lecture
     InputStream in = uc.getInputStream();
     // on lit le premier bit
     int c = in.read();
     // on cree un StringBuilder pour par la suite y ajouter tout les bit lus
     StringBuilder build = new StringBuilder();
     // tant que c n'est pas egale au bit indiquant la fin d'un flux...
     while (c != -1) {
     build.append((char) c);
     // ...on l'ajoute dasn le StringBuilder...
     c = in.read();
     // ...on lit le suivant
     }
     // on retourne le code de la page
     toreturn = build.toString();
    
     } catch (MalformedURLException e) {
    
     e.printStackTrace();
     } catch (IOException e) {
    
     e.printStackTrace();
     }
     return toreturn;
     } 
}


mon problème est que je sais pas comment attacher ces deux blocs et comment les compiler et finir mon travail pour obtenir le résultat final..

Merci pour ceux qui lisent et répondre à mes questions

:)

13 réponses

cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
11 avril 2012 à 10:10
Salut,

Comme ça, je dirais de simplement copier la méthode statique getIpFrom dans le premier bloc... Et la tu n'auras plus qu'un seul bloc...

Concernant la compilation, ton environnement de développement (Eclipse, NetBeans, ..) devrait s'en charger tout seul...
0
merry1marie Messages postés 8 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 12 avril 2012
11 avril 2012 à 20:21
Salut,

D'abord je te remercie pour ta réponse;

Mais quand je la copie et j'annule tout le deuxième bloc, je n'aurais plus le message "entrer l'adresse de votre page html"??

Merci d'avance
:)
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
11 avril 2012 à 20:27
non
tu ne peux pas avoir deux méthode main dans une meme classe...
si tu veux garder le meme principe, il te faut garder deux classes séparées, c'est le plus simple...

concernant les problèmes de compilation, sans nous dire lesquels surviennent, on ne peut pas t'aider ^^
0
merry1marie Messages postés 8 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 12 avril 2012
11 avril 2012 à 20:48
Je préfère garder le même principe oui, j'explique ce que je veux faire exactement:

quand j'exécute le 2me bloc, j'aurais le mssg demandant l'@ de la page html, je tape par exemple www.google.fr, il me renvoie son code source.

Le 1er bloc concerne le serveur, j'arrive pas à l'exécuter, comment le faire fonctionner, sachant que mon but et de réaliser un serveur http "local".

Je travaille avec Eclipse sous Windows7.

Merci d'avance

:)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
11 avril 2012 à 20:58
pourquoi n'arrives-tu pas à l'exécuter? quels sont tes messages d'erreurs?
normalement tu dois avoir deux fichiers différents.
ensuite tu fais comme si tu exécutais deux programmes différents... un avec le premier bloc et le deuxieme avec, tu l'auras deviné, le deuxieme bloc
0
merry1marie Messages postés 8 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 12 avril 2012
11 avril 2012 à 21:04
Oui j'exécute chacun comme tout seul, mais dans les deux cas j'obtient les m'm msg, celui d'entrer l'@ de la page html??

Je crois que pour le faire fonctionner je dois taper dans mon navigateur l'@ "http://localhost:18000/.mapage.htm"

mapage: c'est une page html que j'ai mis dans le dossier bin de mon projet??

really confused...
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
12 avril 2012 à 08:06
pas du tout...
C'est parce que tu lances deux fois le deuxième bloc...
dans le package explorer, fait un clock droit sur le premier block, run, ... ensuite tu fais de meme pour le deuxième. Normalement si le premier block se lance, tu auras dans la console :
Server Started...
Waiting for connexions...
0
merry1marie Messages postés 8 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 12 avril 2012
12 avril 2012 à 09:28
Quand je lance le premier j'aurais un msg d"erreur disant:

null
java.net.MalformedURLException: no protocol: www.google.fr
at java.net.URL.(Unknown Source)
at java.net.URL.(Unknown Source)
at java.net.URL.(Unknown Source)
at html.getIpFrom(html.java:26)
at html.main(html.java:18)


Merci d'avance
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
12 avril 2012 à 09:32
tu as entré l'adresse www.google.fr?
et si tu mets http://www.google.fr??
0
merry1marie Messages postés 8 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 12 avril 2012
12 avril 2012 à 09:43
oui c vrai avec http://www.google.fr c juste et il me renvoie le code source de cette page, maintenant comment je fais pour démarrer le serveur??

y'r
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
12 avril 2012 à 10:08
comme je te l'ai dit, tu fais un click droit dans le code de ton bloc 1 et tu fais Run as...
0
merry1marie Messages postés 8 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 12 avril 2012
12 avril 2012 à 16:45
Re


Si je ne change aucun paramètre et j'exécute seulement, j’obtiens cette erreur:

Entrer l'adresse de votre page html
http://www.google.fr
java.net.UnknownHostException: www.google.fr
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at html.getIpFrom(html.java:30)
at html.main(html.java:18)
null
0
merry1marie Messages postés 8 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 12 avril 2012
12 avril 2012 à 16:55
désolée, c'est pas cette erreur que j’obtiens...
[del]
Code Java :
Entrer l'adresse de votre page html
http://www.google.fr
java.net.UnknownHostException: www.google.fr
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at html.getIpFrom(html.java:30)
at html.main(html.java:18)
null/del


C'est plutôt celle ci:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 

at HttpServer.main(httpserver.java:11)



Alors que dois-je faire...
0
Rejoignez-nous