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.
Le serveur de son coté, reçoit tout ça et en refait la constitution.
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])); } }
La connexion au serveur se fait normalement :
Tout ça fonctionne parfaitement avec l'émulateur, et le serveur ( sur une autre machine ), recoit bien la bonne photo parfaitement reconstitué.
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();
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
Partager