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

API standards et tierces Android Discussion :

Socket problème Android


Sujet :

API standards et tierces Android

  1. #1
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Points : 85
    Points
    85
    Par défaut Socket problème Android
    Bonsoir a tous,

    Je débute a la programmation sous Android, et j'ai besoin d'envoyé des requêtes via le réseau locale suivant le model Client/Serveur. Pour cela j'ai une application Serveur et une application Client, j'ai trouvé cela sur le net, et ça marche parfétement. Lorsque j’essaye d’implémenter l'application client pour Android, j'ai pas de message d'erreur, remarque: il fait un saut vers le catch et j'ai null sur le e.getMessage();

    Voila le code pour envoyé un simple message:

    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
     
              Socket socket = new Socket("172.26.0.1", 1313);
              //BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
              PrintStream out = new PrintStream(socket.getOutputStream());
     
     
              out.println("Message: Test");
     
              //while (!in.ready());
             //print(in.readLine());
     
             //in.close();
             out.close();
     
     
             socket.close();

    Ce code fonctionne correctement, j'envoi le message via l'application client depuis un pc, l'application serveur est exécuté sur un autre pc.

    Alors dés que j’implémente le même code pour un application Android, j'ai rien je sais qu'il s’arrête lors de l'initialisation du Socket (grâce print sur chaque ligne), et qui il fait un saut vert le catch mais j'ai null pour le e.getMessage() et rien sur la StackTrace !!!!!


    Info:
    - Je merise assez bien la programmation en java.
    - J'ai tester l'application sur l’émulateur (qui a un accé sur mon réseau) et sur mon Smartphone j'ai le même résultat négatif.
    - Je suis sur que j'ai pas un problème au niveau de la configuration, parce que j'ai téléchargé une application de teste de Socket
    depuis PlayStore et cette dernière fonctionner correctement avec l'application serveur sur le pc.


    N'importe qu'elle indication est la bienvenue et merci d'avance ^_^

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Comment tu fais le logging ?

    Sous android il FAUT utiliser le logcat:
    Dans une exception par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    } catch (Exception ex) {
        Log.e(TAG,"Erreur pour faire tel ou tel truc",ex);
    }
    Si il y a un exception il y a OBLIGATOIREMENT un stacktrack, sa création est dans le constructeur de Throwable....

    Il faudrait voir le code complet (il manque la gestion des exceptions, le try/catch/finally dont du parles).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Comment tu fais le logging ?

    Sous android il FAUT utiliser le logcat:
    Dans une exception par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    } catch (Exception ex) {
        Log.e(TAG,"Erreur pour faire tel ou tel truc",ex);
    }
    Si il y a un exception il y a OBLIGATOIREMENT un stacktrack, sa création est dans le constructeur de Throwable....

    Il faudrait voir le code complet (il manque la gestion des exceptions, le try/catch/finally dont du parles).
    Merci, j'ai bien compris et j'ai suivi votre conseille, voila le code source:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
                    try 
    		{		      
    			Socket socket = new Socket("192.168.152.50", 1313);
    			//Socket socket = new Socket("nadjibnet-pc", 1313);
    			print("socket OK"); //Ce message s'affiche sur un TextAeria si le socket s'initialise correctement
     
     
    			BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    		        PrintStream out = new PrintStream(socket.getOutputStream());
     
    		        out.println("Message: Mon Message");
     
     
    		        while (!in.ready());
    		        print(in.readLine());
     
    		        in.close();
    		        out.close();
                            socket.close();
     
    		} 
    		catch (Exception ex) 
    		{
    			//e.printStackTrace();
    			//print(e.getMessage());
    			Log.e("thr:","Socket Erreur: Message:"+ex.getMessage() ,ex);
     
    		}

    Et voici La stacktrace que j'ai: (remarque que j'ai un "null" comme message de l'exception)

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    03-09 22:02:12.018: E/Trace(1375): error opening trace file: No such file or directory (2)
    03-09 22:02:45.978: E/thr:(1375): Socket Erreur: Message:null
    03-09 22:02:45.978: E/thr:(1375): android.os.NetworkOnMainThreadException
    03-09 22:02:45.978: E/thr:(1375): 	at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
    03-09 22:02:45.978: E/thr:(1375): 	at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
    03-09 22:02:45.978: E/thr:(1375): 	at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
    03-09 22:02:45.978: E/thr:(1375): 	at libcore.io.IoBridge.connect(IoBridge.java:112)
    03-09 22:02:45.978: E/thr:(1375): 	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
    03-09 22:02:45.978: E/thr:(1375): 	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    03-09 22:02:45.978: E/thr:(1375): 	at java.net.Socket.startupSocket(Socket.java:566)
    03-09 22:02:45.978: E/thr:(1375): 	at java.net.Socket.tryAllAddresses(Socket.java:127)
    03-09 22:02:45.978: E/thr:(1375): 	at java.net.Socket.<init>(Socket.java:177)
    03-09 22:02:45.978: E/thr:(1375): 	at java.net.Socket.<init>(Socket.java:149)
    03-09 22:02:45.978: E/thr:(1375): 	at com.example.nettestnadjib.MainActivity.botonaClick(MainActivity.java:96)
    03-09 22:02:45.978: E/thr:(1375): 	at java.lang.reflect.Method.invokeNative(Native Method)
    03-09 22:02:45.978: E/thr:(1375): 	at java.lang.reflect.Method.invoke(Method.java:511)
    03-09 22:02:45.978: E/thr:(1375): 	at android.view.View$1.onClick(View.java:3594)
    03-09 22:02:45.978: E/thr:(1375): 	at android.view.View.performClick(View.java:4204)
    03-09 22:02:45.978: E/thr:(1375): 	at android.view.View$PerformClick.run(View.java:17355)
    03-09 22:02:45.978: E/thr:(1375): 	at android.os.Handler.handleCallback(Handler.java:725)
    03-09 22:02:45.978: E/thr:(1375): 	at android.os.Handler.dispatchMessage(Handler.java:92)
    03-09 22:02:45.978: E/thr:(1375): 	at android.os.Looper.loop(Looper.java:137)
    03-09 22:02:45.978: E/thr:(1375): 	at android.app.ActivityThread.main(ActivityThread.java:5041)
    03-09 22:02:45.978: E/thr:(1375): 	at java.lang.reflect.Method.invokeNative(Native Method)
    03-09 22:02:45.978: E/thr:(1375): 	at java.lang.reflect.Method.invoke(Method.java:511)
    03-09 22:02:45.978: E/thr:(1375): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    03-09 22:02:45.978: E/thr:(1375): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    03-09 22:02:45.978: E/thr:(1375): 	at dalvik.system.NativeStart.main(Native Method)

    Merci pour votre attention

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Oui le 'null' comme message d'une exception c'est pas important... toutes les exceptions n'ont pas de 'message' additionnel... comme celui-ci: utilisation de fonctionnalités réseau dans le même thread que l'UI: interdit....

    Chercher NetworkOnMainThreadException dans ce forum permettra de trouver un tas de solutions (AsyncTask, Threads, ...).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Oui le 'null' comme message d'une exception c'est pas important... toutes les exceptions n'ont pas de 'message' additionnel... comme celui-ci: utilisation de fonctionnalités réseau dans le même thread que l'UI: interdit....

    Chercher NetworkOnMainThreadException dans ce forum permettra de trouver un tas de solutions (AsyncTask, Threads, ...).

    OK Merci pour tous

  6. #6
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Simon MARQUIS
    Cela est dû à une mauvaise programmation.
    En gros, depuis les dernières versions d'Android, il est INTERDIT d'effectuer des requêtes Web depuis le Thread graphique (UIThread ou MainThread).
    Il te faut donc effectuer cette requête dans un second Thread.
    Et donc j'ai crée un thread et ça marche.

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

Discussions similaires

  1. [débutant] Sockets: Problème de compilation
    Par wetneb dans le forum Réseau
    Réponses: 4
    Dernier message: 25/06/2006, 11h28
  2. [socket] Problème avec les options
    Par gangsoleil dans le forum Développement
    Réponses: 3
    Dernier message: 13/07/2005, 13h11
  3. [Socket] Problème de lecture flux danss communication
    Par tooney dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 06/06/2005, 11h08
  4. [Thread][socket]Problème de fermeture d'un thread
    Par meda dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 04/11/2004, 01h03
  5. socket : problème avec GetHostByName
    Par SteelBox dans le forum Réseau
    Réponses: 25
    Dernier message: 19/08/2003, 13h49

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