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

Développement Mobile en Java Discussion :

Envoie de données Mobile -> Serveur


Sujet :

Développement Mobile en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de ZouBi
    Inscrit en
    Octobre 2007
    Messages
    508
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 508
    Par défaut Envoie de données Mobile -> Serveur
    Bonjour,
    Je realise en ce moment une application mobile, où l'utilisateur peut choisir une image dans ses dossiers, ou prendre directement une photo depuis l'appareil, et envoyer le tout à un serveur.
    Il envoit tout d'abord au serveur la taille de l'image (w*h), et ensuite, envoi la couleur de chaque pixel au serveur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
              os.write(Cast.intToByteArray(w));
              os.write(Cast.intToByteArray(h));
     
                int rgb[] = new int[1];
                for(int i=0; i<h; i++) {
                    for(int j=0; j<w; j++) {
                        image.getRGB(rgb,0,1,j,i,1,1);
                        os.write(Cast.intToByteArray(rgb[0]));
     
                    }
                }
    Le serveur de son coté, reçoit tout ça et en refait la constitution.
    La connexion au serveur se fait normalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    client = (SocketConnection) Connector.open("socket://mon_hote:16000");
                is = client.openInputStream();
                os = client.openOutputStream();
    Tout ça fonctionne parfaitement avec l'émulateur, et le serveur ( sur une autre machine ), recoit bien la bonne photo parfaitement reconstitué.

    En pratique, sur un vrai mobile (Nokia N95), le serveur ne reçoit pas toutes les informations, ou alors certaines sont corrompues, faussées.
    Au lieu de recevoir par exemple 6000 couleurs de pixels, il va en recevoir par exemple que 5900. Ou alors quand elle arrive en entier, la photo n'est pas correctement constitué ( des nuances de couleurs, des taches RVB sur la photo )...

    Donc je ne sais pas comment régler ça, y a t'il un moyen de vérifier cette transmission? J'suis pourtant bien en TCP... Est ce le mobile qui n'envoie pas correctement? J'envoie trop rapidement les données peut être?

    Lorsque le transfert se passe par wifi du N95 au serveur, voilà l'apercu de l'image recue par le serveur :


    et maintenant par gsm :


    Dans les deux cas, des pixels se perdent ( assez minimes pour les voir )
    mais on dirait que en gsm, il y a une sorte de decalage au niveau des RVB quand un byte se perd.

    Quelqu'un aurait une idée?

    Merci d'avance
    Images attachées Images attachées   

  2. #2
    Membre chevronné
    Avatar de ZouBi
    Inscrit en
    Octobre 2007
    Messages
    508
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 508
    Par défaut
    J'ai trouvé le soucis, pas facile à voir.
    Le soucis etait que le serveur lisait dans le buffer plus rapidement les données que le mobile en envoyait.

    Voici comme je lisais les données recu dans le serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    byte buf[] = new byte[4];
    for(...) {
        in.read(buf);
    }
    Ainsi, j'ai remarqué que le serveur ne lisait pas forcément 4 bytes dans le buffer, ce qui faussait donc la couleur.
    Voici le code corrigeant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    byte buf[] = new byte[4];
    for(...) {
        c = _in.read(buf, 0, 4);
        while(c < 4) {             //must read 4 bytes, or else, there will a decalage of byte
             c = _in.read(buf, c, 4-c);
        }
    }
    En espérant que ça aidera quelqu'un un jour.

  3. #3
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    Je vois que tu as trouvé une solution à ton problème, mais plus simplement, n'est il pas possible de réduire la lenteur d'envoi de la part du mobile ?

    Parce que faire appel à getRGB pour chaque pixel ça doit être bien lent non ?

    Enlève l'offset, fait un appel à getRGB une seule fois, et renvoie rgb[i*j] pour chaque pixel, ça devrait déjà mieux tourner ?

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

Discussions similaires

  1. envoi de données Javascript vers serveur
    Par oclone dans le forum ASP.NET
    Réponses: 11
    Dernier message: 03/11/2008, 12h26
  2. envoi des données d'un poste client vers le serveur
    Par ouadie99 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 11/06/2008, 11h52
  3. [cURL] connexion SSL sur un serveur et envoi de données via POST.
    Par Tongs dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 07/02/2008, 14h29
  4. Réponses: 1
    Dernier message: 26/11/2006, 10h57
  5. Réponses: 3
    Dernier message: 21/11/2006, 17h59

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