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 :

Sockets fonctionnent sur émulateur, pas sur N95


Sujet :

Java ME

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Points : 23
    Points
    23
    Par défaut Sockets fonctionnent sur émulateur, pas sur N95
    Bonjour à tous,
    J'ai une MIDlet J2ME qui doit se connecter via des sockets à un serveur en PHP.
    Ca fonctionne parfaitement sur l'émulateur (connexion, envoi de quelques données et réception d'une réponse de la part du serveur). Mais sur le N95 (connecté en 3G), le serveur reçoit la demande de connexion mais aucune donnée par la suite...
    Voici le code côté client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    String fullAddress = "socket://"+serverAddress+":"+serverPort;
    SocketConnection sc = (SocketConnection) Connector.open(fullAddress);
    OutputStream os = sc.openOutputStream();
    InputStream is = sc.openInputStream();
    os.write(mobilePhoneNumber.getBytes());
    os.write(password.getBytes());
    os.write(latitude.getBytes());
    os.write(longitude.getBytes());
    byte[]b = new byte[2];
    is.read(b);
    Et le client, en PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("could not create socket\n");
    socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>5000));
    socket_set_option($socket,SOL_SOCKET, SO_REUSEADDR, 1);
    $bind = socket_bind($socket, $address, $port) or die("could not create socket");
    socket_listen($socket) or die("could not set up socket listener");
    $client=@socket_accept($socket);
    socket_set_option($client,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>5000));
    echo "accept done </br>";
    $phone_number = socket_read($client,12) or die("could not read phone number");
    $password = socket_read($client,12) or die("could not read password");
    $latitude = socket_read($client,12) or die("could not read latitude");
    $longitude = socket_read($client,12) or die("could not read longitude");
    Sur le serveur j'ai mis "REUSEADDR" pour pouvoir rebinder la même adresse si le serveur est killé pour une raison ou pour une autre
    De plus, j'ai mis des timeout importants pour diverses raisons (>10000Km entre le client et le serveur, connexion de l'un des deux pays pourrie et serveur hébergé sur l'accès Internet d'un particulier...).
    Du côté PHP il y a bien sûr une boucle pour accepter plusieurs clients, etc. mais je ne pense pas que le problème vienne de là.
    Voilà je n'ai aucune idée de pourquoi le code fonctionne sur l'émulateur mais pas sur le Nokia N95 (qui accède à Internet avec une puce 3G). Quelqu'un aurait-il une idée ?

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 51
    Points : 106
    Points
    106
    Par défaut
    J'ai une théorie. J'ai examiné un peu de mon code qui fait plus ou moins la même chose que le tien et je note que j'appelle "flush" sur mon OutputStream avant l'acquisition de l'InputStream. Ca fait longtemps maintent mais si je me souviens bien la raison que ton serveur ne reçoie même pas une byte est parceque avec certains implementations du JVM mobile les données sont tamponées jusqu'au point que le tampon est plein ou flush est appellé.

    L'emulateur, bien-entendu, utilise le SocketConnection fourni par le JVM de ton ordinateur - quasiment certainement un J2SE de Sun.

    Alors si c'est bien le problème la solution est comme suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    String fullAddress = "socket://"+serverAddress+":"+serverPort;
    SocketConnection sc = (SocketConnection) Connector.open(fullAddress);
    OutputStream os = sc.openOutputStream();
    os.write(mobilePhoneNumber.getBytes());
    os.write(password.getBytes());
    os.write(latitude.getBytes());
    os.write(longitude.getBytes());
    byte[]b = new byte[2];
    os.flush();
    InputStream is = sc.openInputStream();
    is.read(b);
    J'espère que tu le trouve utile.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    Merci beaucoup, ça marche c'était aussi simple que ça...
    J'ai perdu un temps considérable sur ce détail, mais maintenant c'est bon
    Merci encore !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Page PHP fonctionne sur local, pas sur hebergeur
    Par borisman dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 14/03/2011, 22h40
  2. [MySQL] "espace client" fonctionne en local, pas sur Internet
    Par quiky dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/10/2009, 15h18
  3. [Dojo] Mise à jour d'un select via php : ok sur FF, pas sur IE6
    Par fayred dans le forum Bibliothèques & Frameworks
    Réponses: 6
    Dernier message: 22/11/2007, 17h51
  4. ce code marche sur FireFox pas sur IE
    Par baignoire dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/03/2006, 20h31
  5. Regexp ok sur IE pas sur Firefox
    Par zebuman dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/06/2005, 13h17

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