IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java ME Discussion :

Pb pour envoyer des données d'une midlet à une servlet


Sujet :

Java ME

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Pb pour envoyer des données d'une midlet à une servlet
    Bonjour,

    J'essaye d'exécuter un exemple de communication HTTP midlet-servlet donné par Carol Hammer dans son livre "Creating Mobile Games" (APress). La communication servlet->midlet se fait sans pb , par contre je n'arrive pas à envoyer le moindre octet de la midlet vers la servlet. La midlet bloque sur l'instruction <dataoutputstream>.write((byte)100)
    Je développe sous Win XP avec le WTK version 2.2 et je fais tourner la servlet en local avec Tomcat 5.5.17



    Voici le code de la midlet qui pose pb :

    public void communicationWithServlet() {
    HttpConnection connection = null;
    DataOutputStream dos = null;
    DataInputStream dis = null;
    try {
    connection = (HttpConnection)Connector.open(SERVER_URL);
    ((HttpConnection)connection).setRequestMethod(HttpConnection.POST);
    int rc = connection.getResponseCode();
    if (rc != HttpConnection.HTTP_OK) {
    throw new IOException("HTTP response code: " + rc);
    }
    dos = connection.openDataOutputStream();
    System.out.println("before");
    dos.write((byte)100);
    System.out.println("after");
    dos.flush();

    dis = connection.openDataInputStream();
    byte[] data = new byte[10];
    dis.readFully(data);
    message = new String(data);
    System.out.println(message);
    } catch(Exception e) { }
    finally {
    try {
    if(dis != null) { dis.close();}
    if(connection != null) {connection.close();}
    }
    catch(Exception e) {}
    }
    }
    }

    La midlet se bloque à l'instruction : dos.write((byte)100);
    Si je le mets en commentaire, le reste de la méthode s'exécute bien et la servlet envoie bien les données à la midlet

    Voici le code de la servlet

    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    public class SimpleServlet extends HttpServlet {
    public void doPost(HttpServletRequest requete, HttpServletResponse reponse) throws ServletException, IOException {
    InputStream is = requete.getInputStream();
    int data= is.read();
    reponse.setContentType("text/html");
    PrintWriter out = reponse.getWriter();
    out.println("Hello");
    out.close();
    }
    }

    Merci d'avance pour votre aide

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Bug à moitié résolu
    Si je retire les deux instructions :

    int rc = connection.getResponseCode();
    if (rc != HttpConnection.HTTP_OK) {
    throw new IOException("HTTP response code: " + rc);
    }

    l'envoi de l'octet de la midlet vers la servlet se passe sans problème

    la valeur de rc est 200

    je ne comprends pas pourquoi l'appel à la méthode getResponseCode bloque ensuite l'envoi de l'octet

    Merci pour votre aide

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 44
    Points : 49
    Points
    49
    Par défaut
    En fait de ce que je crois comprendre, tu as un petit problème sur la sequence de tes actions ... tu initie ta connexion puis attends une réponse et ensuite tu écris ta demande en POST....

    Voilà ce que je peux te proposer rapidement.. c'est à affiner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    HttpConnection c = (HttpConnection)Connector.open(addUrl);
    String encodedData = "message=" + urlEncoder(message);
     
    // Fixe la méthode POST et les headers .. on aurait pu rajouter la taille de la requête
    c.setRequestMethod(HttpConnection.POST);
    c.setRequestProperty("Content-Type","application/x-www-form-urlencoded" );
     
    // Ouverture du flux en écriture    
    OutputStream  os = c.openOutputStream();
    os.write(encodedData.getBytes());
    os.close ();
     
    // et seulement après l'envoi de la requête
     
    // Lecture de la réponse
    InputStream in = c.openInputStream();
    int rc = c.getResponseCode();

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/06/2014, 17h05
  2. code pour envoyer des données
    Par pierrrro dans le forum C++
    Réponses: 1
    Dernier message: 13/05/2011, 17h41
  3. Envoyer des données en POST dans une nouvelle fenetre
    Par benthebest dans le forum jQuery
    Réponses: 9
    Dernier message: 18/02/2011, 10h02
  4. [MySQL] info pour envoyer des données par mail
    Par boubourse92 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/01/2008, 13h04
  5. envoyer des données depuis cellules excel à une table access
    Par alaouiyassine01 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/10/2007, 17h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo