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

Android Studio Java Discussion :

[Android studio] Problème UDP Coté client


Sujet :

Android Studio Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Points : 4
    Points
    4
    Par défaut [Android studio] Problème UDP Coté client
    Bonjour, j'expose mon problème.
    Dans un premier temps, j'ai créer un serveur UDP en java sur mon PC qui est près a recevoir tout type de requête. la tout est ok
    Dans second temps, j'ai testé avec des applications android ou apple UDP et ou en python sur un pc pour teste les requêtes envoyer, j'ai constater qui reçois les biens requêtes
    Et enfin dans un troisième temps, c'est la que problème apparaît j'ai créer une appli Android UDP Client pour envoyer les requêtes sur le réseaux et j'ai constaté aucune réception sur mon serveur UDP.
    j'ai beau chercher sur le net, j'ai n'est pas trouver de solution vous expose mon code java ainsi que mon code manifests
    sachant que port utiliser est 5001 et l'adresse serveur est 192.168.1.22
    je vous remercie d'avance.


    MainActivity.java
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    package dev.yap66.fr.qyapudpclient;
     
    import android.app.Activity;
    import android.os.Bundle;
     
    import java.io.*;
    import java.net.* ;
     
    public class MainActivity extends Activity {
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            runUdpClient();
            finish();
        }
     
        private static final int UDP_SERVER_PORT = 5001;
     
        private void runUdpClient() {
     
            String udpMsg = "hello world from UDP client " + UDP_SERVER_PORT;
            DatagramSocket ds = null;
            try {
                ds = new DatagramSocket();
                InetAddress serverAddr = InetAddress.getByName("192.168.1.22");
                DatagramPacket dp;
                dp = new DatagramPacket(udpMsg.getBytes(), udpMsg.length(), serverAddr, UDP_SERVER_PORT);
                ds.send(dp);
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (ds != null) {
                    ds.close();
                }
            }
        }
    }
    AndroidManifest.xml
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="dev.yap66.fr.qyapudpclient" >
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
        <uses-sdk android:minSdkVersion="4" />
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
     
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
     
    </manifest>

  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
    Bonjour !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    } catch (SocketException e) {
    e.printStackTrace();
    } catch (UnknownHostException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    tous ces catchs sont inutiles vu le dernier non ?
    Sinon sous Android on prefere utiliser "Log":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    } catch (Exception e) {
    Log.e("UDPTest","Problème d'envoi datagram",e);
    } finally {

    J'avoue n'avoir jamais vraiment testé en UDP, je sais que la partie TCP possède une protection pour éviter que les opération "réseau" ne soient réalisées par le thread principal (celui de l'UI), et donc une exception NetworkOnMainThreadException est alors envoyée dès qu'on utilise une fonction réseau.
    J'ai peur que ce soit aussi le cas en UDP (ce qui est idiot je l'admet, à part la résolution de nom, rien n'est synchrone en UDP) => piste 1.

    Ensuite le test est réalisé comment ?
    Sous un vrai device ? connecté en WiFi sur le réseau 192.168.1.0/24 ?

    Sous émulateur cela ne marchera pas, l'émulateur est connecté sur le réseau virtuel 10.0.0.0/8 (ou il n'y a que l'hôte et l'émulateur).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour, nicroman
    Merci pour ta réponse

    J'ai réaliser sur un vrai Device, avec l'adresse 192.168.1.26.
    Sachant que j'ai testé d'autre application utilisant le mode UDP sur android que j'ai pris sur Google play. mon serveur reçois les requête UDP.

    J'ai modifier le code comme tu ma dit Voici le log reçus

    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
     
    09-11 11:26:34.531    5638-5638/dev.yap66.fr.qyapudpclient E/UDPTest﹕ Problème d'envoi datagram
        android.os.NetworkOnMainThreadException
                at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
                at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:276)
                at libcore.io.IoBridge.sendto(IoBridge.java:513)
                at java.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java:184)
                at java.net.DatagramSocket.send(DatagramSocket.java:305)
                at dev.yap66.fr.qyapudpclient.MainActivity.runUdpClient(MainActivity.java:30)
                at dev.yap66.fr.qyapudpclient.MainActivity.onCreate(MainActivity.java:15)
                at android.app.Activity.performCreate(Activity.java:6221)
                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)
                at android.app.ActivityThread.access$900(ActivityThread.java:172)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:145)
                at android.app.ActivityThread.main(ActivityThread.java:5832)
                at java.lang.reflect.Method.invoke(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:372)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

  4. #4
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Bonjour,

    Je pense que tu as cette erreur parce que tu exécutes une opération réseau dans le thread principal. Utilise AsyncTask...

    Christian,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Qu'est ce que AsyncTask ?
    Utilise-t-il le mode UDP ?
    Avez vous des exemples ?

    Merci d'avance

  6. #6
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    C'est une classe qu'on étend pour exécuter une opération longue dans un thread autre que celui qui gère UI (bref).

    Tu trouveras un exemple ici http://developer.android.com/referen...AsyncTask.html

    Christian,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  7. #7
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par MasterMbg Voir le message
    C'est une classe qu'on étend pour exécuter une opération longue dans un thread autre que celui qui gère UI (bref).

    Tu trouveras un exemple ici http://developer.android.com/referen...AsyncTask.html

    Christian,
    Merci MasterMbg la solution avec AsyncTask marche à la perfection.
    Je poste mon code, pour aider d'autre personne, si sa peut aider le voici ci dessous
    Comme dit MasterMgb il faut utiliser le AsyncTask qui permet de réaliser des tâches de manière asynchrone

    Je vous envoie le code corriger avec AsyncTask, encore merci je peut enfin continuer d'avancer sur mon programme

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    package dev.yap66.fr.qyapudpclient;
     
    import android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Build;
    import android.os.Bundle;
    import android.util.Log;
     
    import java.net.* ;
     
    public class MainActivity extends Activity {
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            runUdpClient();
            finish();
        }
     
        private static final int UDP_SERVER_PORT = 5432;
        private AsyncTask<Void, Void, Void> async_cient;
     
        private void runUdpClient() {
     
            async_cient = new AsyncTask<Void, Void, Void>() {
                @Override
                protected Void doInBackground(Void... params) {
                    String udpMsg = "hello world from UDP client " + UDP_SERVER_PORT;
                    DatagramSocket ds = null;
                    try {
                        ds = new DatagramSocket();
                        InetAddress serverAddr = InetAddress.getByName("192.168.1.22");
                        DatagramPacket dp;
                        dp = new DatagramPacket(udpMsg.getBytes(), udpMsg.length(), serverAddr, UDP_SERVER_PORT);
                        ds.send(dp);
                    } catch (Exception e) {
                        Log.e("UDPTest", "Problème d'envoi datagram", e);
                    } finally {
                        if (ds != null) {
                            ds.close();
                        }
                    }
                    return null;
                }
                protected void onPostExecute(Void result) {
                    super.onPostExecute(result);
                }
            };
            if (Build.VERSION.SDK_INT >= 11)
                async_cient.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
            else async_cient.execute();
        }
    }

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

Discussions similaires

  1. [Android Studio] Problème d'affichage de carte Google Maps
    Par yoss.ra dans le forum Android Studio
    Réponses: 1
    Dernier message: 04/11/2016, 16h04
  2. [Android Studio] Problème de débogage
    Par CharleLéo dans le forum Android Studio
    Réponses: 21
    Dernier message: 29/08/2015, 12h20
  3. [Android-Studio] Problème à la création de projet (jdk)
    Par stc074 dans le forum Android Studio
    Réponses: 2
    Dernier message: 30/11/2014, 20h35
  4. débutant android studio problème
    Par giovanni dans le forum Android Studio
    Réponses: 2
    Dernier message: 19/01/2014, 22h27
  5. [Débutant] Problème encodage coté client et récupération côté serveur
    Par Pataud dans le forum Développement Web en Java
    Réponses: 3
    Dernier message: 05/11/2013, 16h50

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