[J2ME] Transfert Midlet - serveur http

Transfert Midlet - serveur http [J2ME] - Java - Programmation

Marsh Posté le 03-03-2006 à 14:27:50    

Bonjour,
voila je poste mon probleme car je n'arrive pas le resoudre.
 
Je dois creer un midlet et un serveur. Le midlet doit pouvoir demander un fichier sur le serveur, et l'enregistrer dans un dossier specifique. Le protocole utilise est HTTP.
 
le midlet envoie bien la requete, le serveur la recoit et la traite correctement. Ensuite il envoie le fichier qui est alors sous la forme d'un tableau d'octets. Le probleme que j'ai, c'est que le midlet recoit un InputStream, qui a -1 comme taille..
 
Si quelqu'un sait d'ou cela peut provenir merci d'avance!!


---------------
0x53 0x61 0x6C 0x65 0x47 0x65 0x65 0x6B
Reply

Marsh Posté le 03-03-2006 à 14:27:50   

Reply

Marsh Posté le 03-03-2006 à 14:39:34    

Citation :

le midlet recoit un InputStream, qui a -1 comme taille...


 
Humm pour moi la notion de taille n'existe pas pour un InputStream, qu'est ce que tu mesures ?
 

Citation :

Si quelqu'un sait d'ou cela peut provenir merci d'avance!!


Montre nous ce que tu as fait, ma boule de cristal est cassée :p

Message cité 1 fois
Message édité par Bidem le 03-03-2006 à 14:39:53
Reply

Marsh Posté le 03-03-2006 à 14:54:32    

Bidem a écrit :

Citation :

le midlet recoit un InputStream, qui a -1 comme taille...


 
Humm pour moi la notion de taille n'existe pas pour un InputStream, qu'est ce que tu mesures ?
 

Citation :

Si quelqu'un sait d'ou cela peut provenir merci d'avance!!


Montre nous ce que tu as fait, ma boule de cristal est cassée :p


 
 
 
voici le midlet
 

Code :
  1. try
  2.        
  3.          {
  4.             System.out.println("on ouvre une connection avec le serveur" );
  5.             hc = (HttpConnection)Connector.open("http://localhost:60000/"+a);
  6.        
  7.        
  8.            //http.setRequestMethod(HttpConnection.GET);           
  9.             System.out.println("connected with GET method!" );
  10.          
  11.             System.out.println("Input stream open" );
  12.             System.out.println("Msg: " + hc.getResponseMessage());
  13.             System.out.println("Code: " + hc.getResponseCode());
  14.        
  15.          
  16.        
  17.             if (hc.getResponseCode() == HttpConnection.HTTP_OK)
  18.             {
  19.                System.out.println("Trying to open connection" );
  20.            
  21.                if(hc  == null ){
  22.                   System.out.println("Http connection is out." );
  23.                }
  24.                          
  25.                //int leng= (int) hc.getContentLength();
  26.                //System.out.println("longueur de hc :"+leng);
  27.              
  28.                try {
  29.                   is = hc.openInputStream();
  30.                   System.out.println("Connection to receive open" );
  31.              
  32.                
  33.              
  34.              
  35.                   System.out.println(is);
  36.                  
  37.                   len = is.available();
  38.              
  39.              
  40.                   System.out.println("Size of inputstream :"+len);
  41.                   if(len == -1)
  42.                   {
  43.                      System.out.println("File not ok" );
  44.                   }
  45.              
  46.              
  47.                  
  48.                
  49.                   byte data[] = new byte[len];
  50.                   is.read(data);
  51.              
  52.              
  53.              
  54.                   System.out.println("Nombre de bytes recus : "+len);
  55.                }
  56.                    catch (IOException ioe) {
  57.                   }
  58.             }   
  59.             else
  60.             {
  61.                System.out.println("unable to open data" );
  62.             }
  63.          }
  64.        
  65.          finally
  66.          {
  67.             if (is != null)
  68.                is.close();   
  69.             if (hc != null)
  70.                hc.close();}


 
 
et voici la partie serveur

Code :
  1. //création du socket serveur  
  2.          try{
  3.             socketL = new ServerSocket (portserver);           
  4.          }
  5.              catch (IOException ioe)
  6.             {
  7.                System.out.println("exception lors de la création du socket serveur " );
  8.                System.exit(0);
  9.             }
  10.      
  11.      
  12.      
  13.         //boucle infinie
  14.          while (true)
  15.          {
  16.          //création du socket service
  17.             try  {          
  18.                socketS = socketL.accept();
  19.                System.out.println("Socket service open" );
  20.             }
  21.            
  22.                 catch (IOException io)
  23.                {
  24.                   System.out.println("Exception lors de la création du socket service "+io);
  25.                   System.exit(0);
  26.                }
  27.               //flux entrée
  28.             try{
  29.                fluxEntree = new BufferedReader ( new InputStreamReader ( socketS.getInputStream()));
  30.                System.out.println("Incoming stream" );
  31.             }
  32.                 catch(IOException ioe)
  33.                {
  34.                   System.out.println("mauvais flux 1" );
  35.                   System.exit(0);
  36.                }
  37.        
  38.                  
  39.            //file name
  40.             try{
  41.                text = fluxEntree.readLine();
  42.                System.out.println("File name with protocol to send : "+text);
  43.            
  44.             }
  45.                 catch (IOException i)
  46.                {
  47.                   System.out.println("mauvais flux 3" );
  48.                   System.exit(2);
  49.                }
  50.                    
  51.          //delete parameter of file name
  52.             char temp1[] = new char[text.length()];
  53.             temp1=text.toCharArray();
  54.             int nb = (text.length())-14;
  55.             String temp2 = String.copyValueOf(temp1,5,(int)nb);
  56.             System.out.println("Correct file name : "+temp2);
  57.        
  58.              
  59.            //File to byte
  60.            
  61.             File fichier= new File(temp2);
  62.             int leng = (int)fichier.length();
  63.             System.out.println("Size file : "+leng);
  64.             byte buf[] = new byte[leng];
  65.        
  66.             try{
  67.                InputStream iStr = new FileInputStream(fichier);
  68.              
  69.              // Read in the bytes  
  70.                int offset = 0;
  71.            
  72.                iStr.read(buf, offset, buf.length);
  73.                System.out.println("Array size : "+buf.length);
  74.                          
  75.             // Close the input stream   
  76.                iStr.close();
  77.             }
  78.                 catch(IOException iooee){}
  79.                  
  80.        
  81.          //envoie du fichier
  82.             try{
  83.                fluxSortie = new PrintStream ( socketS.getOutputStream());
  84.                System.out.println(buf);
  85.                fluxSortie.println("HTTP/1.1 200 OK" );
  86.            //    fluxSortie.println("Content-type : text/plain" );
  87.               // fluxSortie.println("Content-length : "+leng);
  88.              
  89.            
  90.              // fluxSortie.println("Connection : close" );   
  91.                fluxSortie.println("" );
  92.                fluxSortie.write(buf,0,leng);
  93.              
  94.              
  95.              
  96.             }
  97.                 catch (IOException ioex)
  98.                {
  99.                   System.out.println("mauvais flux 4" );
  100.                   System.exit(3);
  101.                }
  102.             System.out.println("\n reponse HTTP_OK send \n" );
  103.             System.out.println("Sending file with output stream" );
  104.        
  105.             try{
  106.                socketS.close();
  107.             }
  108.                 catch(IOException io){
  109.                   System.out.println("Error with socket" );
  110.                }
  111.        
  112.             System.out.println("Connection Close ;" );
  113.          }


 
 
j'espere que tu ty retrouveras ;)
merci en tout cas


---------------
0x53 0x61 0x6C 0x65 0x47 0x65 0x65 0x6B
Reply

Marsh Posté le 03-03-2006 à 15:09:06    

InputStream.avalaible()  ca te retourne un int et ca te donne la taille
 
dans la theorie, si cette valeur est egale a -1, cela veut dire qu'il n'y arien dans mon InputStream.. pourtant jenvoie bien un tableau d'octet..
 
je me demamde s'il n'ya pas d'erreur de "communication" entre le serveur et le midlet..


---------------
0x53 0x61 0x6C 0x65 0x47 0x65 0x65 0x6B
Reply

Marsh Posté le 03-03-2006 à 15:55:58    

Tu ne flush pas ton flux de sortie, ça peut venir de là

Reply

Marsh Posté le 03-03-2006 à 16:12:26    

ca ne change rien.. :(


---------------
0x53 0x61 0x6C 0x65 0x47 0x65 0x65 0x6B
Reply

Marsh Posté le 06-03-2006 à 10:57:47    

:bounce:


---------------
0x53 0x61 0x6C 0x65 0x47 0x65 0x65 0x6B
Reply

Marsh Posté le 08-03-2006 à 16:57:36    

Tu as vérifié ton abonnement GPRS?
souvent le java possède son propre point d'accès, différent des AP du tel.
En plus ton forfait doit être un forfait DATA, et pas uniquement WAP GPRS(p.ex. avec mon forfait multimédia illimité chez bouygues, je px asp utiliser les midlets communiquantes, par contre avec Orange World pas de pb). De plus, c'est pas pq tu as l'icone "G" qui s'affiche que la connexion s'est bien réalisée.
 
En plus du coté de ton serveur, tu dois mettre une petite routine qui log toutes les interrogations; de cette façon tu sais instantannément si ton serveur recoit la requete de la midlet ou pas.
 
Effectivement qd la comm ne s'établit pas, tu recois -1 pour le nb d'octets lus.
 


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
Reply

Marsh Posté le 08-03-2006 à 17:09:05    

par ailleurs je te recommande de tester tes applis séparément:
ta midlet tu testes avec un vrai serveur web et sur le port 80.
ton serveur tu testes avec Firefox et le tres utile plugin "live http headers"
 
tu as des méthodes, je crois, qui s'appliquent à la socket pour définir le sens des flux, genre shutdownOutput() ; essaye de fermer et ouvrir les bons flux, mais un seul à la fois (p.ex d'abord entrant pr récupérer la requete, puis sortant pour émettre la réponse).
 
 :hello:  
 


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
Reply

Marsh Posté le 10-03-2006 à 11:34:43    

merci !!


---------------
0x53 0x61 0x6C 0x65 0x47 0x65 0x65 0x6B
Reply

Sujets relatifs:

Leave a Replay

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