Publicité
+ Répondre à la discussion Actualité déjà publiée
Affichage des résultats 1 à 15 sur 15
  1. #1
    Rédacteur
    Avatar de Viish
    Homme Profil pro Sylvain Berfini
    Ingénieur développement logiciels
    Inscrit en
    février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Nom : Homme Sylvain Berfini
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 427
    Points : 1 306
    Points
    1 306

    Par défaut [Tutoriel] Android et le broadcast UDP appliqué à la détection d'un serveur en réseau Wi-Fi local

    Bonjour,

    Voici un nouveau tutoriel expliquant comment se servir du broadcast UDP sous Android pour trouver automatiquement l'adresse IP d'un serveur sur le même réseau Wi-Fi local.

    Merci de poster vos remarques ou question à la suite.
    Ingénieur Développement Mobile (Android / Windows Phone)
    http://sberfini.developpez.com/

  2. #2
    Membre Expert
    Avatar de MathiasSeguy
    Homme Profil pro Mathias Seguy
    Fondateur Android2EE - Formation Expertise Android
    Inscrit en
    avril 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Nom : Homme Mathias Seguy
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fondateur Android2EE - Formation Expertise Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2011
    Messages : 117
    Points : 1 280
    Points
    1 280

    Par défaut

    Bonjour,
    Super article, j'en ai les yeux qui brillent tellement c'est beau.
    Juste une question toute bête, le code serveur je le déploie où et sur quoi ? Je fais un war et c'est fini?

  3. #3
    Rédacteur
    Avatar de Viish
    Homme Profil pro Sylvain Berfini
    Ingénieur développement logiciels
    Inscrit en
    février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Nom : Homme Sylvain Berfini
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 427
    Points : 1 306
    Points
    1 306

    Par défaut

    Bonjour,

    Ravi que tu ai apprécié.
    Pour le code serveur, celui que je donne est un code serveur pour application Android, pour le cas ou l'on fait une application voulant dialoguer avec une autre instance d'elle même sous la forme d'un échange client serveur.
    Après pour un serveur "classique", le principe est le même, bien que l'API puisse changer. Il suffit de créer une socket serveur en UDP.

    Bonne continuation.
    Ingénieur Développement Mobile (Android / Windows Phone)
    http://sberfini.developpez.com/

  4. #4
    Membre Expert
    Avatar de MathiasSeguy
    Homme Profil pro Mathias Seguy
    Fondateur Android2EE - Formation Expertise Android
    Inscrit en
    avril 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Nom : Homme Mathias Seguy
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fondateur Android2EE - Formation Expertise Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2011
    Messages : 117
    Points : 1 280
    Points
    1 280

    Par défaut

    Fichtre dis donc, j'avais pas compris.
    Ca veut dire que le code serveur je le colle dans mon application Android dans sa partie serveur et ça marche tout seul?
    J'ai pas besoin de demander des permissions, ni de mettre ce code dans un service, comment ton code est appelé ? Ton application "serveur" tourne en permanence? Aurais-tu un cas d'utilisation?

  5. #5
    Rédacteur
    Avatar de Viish
    Homme Profil pro Sylvain Berfini
    Ingénieur développement logiciels
    Inscrit en
    février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Nom : Homme Sylvain Berfini
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 427
    Points : 1 306
    Points
    1 306

    Par défaut

    Imagines 2 boutons dans une Activity, un nommé "Serveur" et l'autre "Client".
    Si tu cliques sur serveur, il crée un objet Discovery (le nom de ma classe), et appelles "waitingForDiscover()".
    Le bouton "client" lui crée une instance de Discovery et ensuite appelles getServerIp(). Si le retour de la fonction est null, alors aucun serveur n'a été trouvé, sinon elle renvoie l'IP du serveur, et ce dernier a arrêté son serveur UDP entre temps.
    Ingénieur Développement Mobile (Android / Windows Phone)
    http://sberfini.developpez.com/

  6. #6
    Membre Expert
    Avatar de MathiasSeguy
    Homme Profil pro Mathias Seguy
    Fondateur Android2EE - Formation Expertise Android
    Inscrit en
    avril 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Nom : Homme Mathias Seguy
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fondateur Android2EE - Formation Expertise Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2011
    Messages : 117
    Points : 1 280
    Points
    1 280

    Par défaut

    Et ensuite je parle entre eux en utilisant le protocole TCP ou UDP comme je veux.
    Magique.
    Je pense que tu pourrais rajouter ton dernier post dans un paragraphe exemple d'utilisation dans ton article, cela éclairerait pas mal de monde.
    En tout cas super.
    merci pour ton article

  7. #7
    Rédacteur
    Avatar de Viish
    Homme Profil pro Sylvain Berfini
    Ingénieur développement logiciels
    Inscrit en
    février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Nom : Homme Sylvain Berfini
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 427
    Points : 1 306
    Points
    1 306

    Par défaut

    Citation Envoyé par MathiasSeguy Voir le message
    Et ensuite je parle entre eux en utilisant le protocole TCP ou UDP comme je veux.
    merci pour ton article
    Oui c'est tout à fait ça.

    Et tu as raison je vais rajouter dans le tuto le mode d'utilisation.
    Ingénieur Développement Mobile (Android / Windows Phone)
    http://sberfini.developpez.com/

  8. #8
    Candidat au titre de Membre du Club
    Profil pro Julien
    Étudiant
    Inscrit en
    février 2005
    Messages
    64
    Détails du profil
    Informations personnelles :
    Nom : Julien
    Âge : 26

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2005
    Messages : 64
    Points : 13
    Points
    13

    Par défaut

    Bonjour,

    Etant en stage, je dois créer une application sur smartphone permettant d'envoyer des jpeg à un mobile embarqué.
    Ma contrainte est que la communication doit se faire via le wifi en udp par un réseau, je suis donc tombé sur ton code (qui est très bien), néanmoins qu'en je l'utilise tel quel, mon application plante juste avant le "socket.send(packet);".
    Via le module ddms, j'ai récupéré quelque infos entre autres :
    07-12 14:54:10.360: INFO/System.out(5757): paddr 192.168.10.97 gateway 192.168.10.200 netmask 255.255.255.0 dns1 192.168.10.200 dns2 0.0.0.0 DHCP server 192.168.10.200 lease 7200 seconds
    J'obtiens comme erreur :
    07-12 14:54:10.360: DEBUG/ERROR(5757): Verify your Wifi connection
    Ce qui implique que mon réseau n'est pas joignable.

    Et après plusieurs débogage, je ne vois pas ce qui pourrait merder.
    Je développe sous un Xpéria version 2.1-update (API 7) sans carte sim, je peux me connecter manuellement avec le wifi au réseau local de l'entreprise.
    Je précise aussi que je suis débutant sous android...

    Merci pour votre aide,
    Cordialement

  9. #9
    Rédacteur
    Avatar de Viish
    Homme Profil pro Sylvain Berfini
    Ingénieur développement logiciels
    Inscrit en
    février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Nom : Homme Sylvain Berfini
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 427
    Points : 1 306
    Points
    1 306

    Par défaut

    Vérifie qu'au moment d’exécuter ton appli tu sois bien connecté au WiFi, et si c'est pas ça que dans ton fichier Manifest.xml tu demandes bien la permission Internet.
    Ingénieur Développement Mobile (Android / Windows Phone)
    http://sberfini.developpez.com/

  10. #10
    Candidat au titre de Membre du Club
    Profil pro Julien
    Étudiant
    Inscrit en
    février 2005
    Messages
    64
    Détails du profil
    Informations personnelles :
    Nom : Julien
    Âge : 26

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2005
    Messages : 64
    Points : 13
    Points
    13

    Par défaut

    Pour ce qui est du manifest internet est bien présent mais effectivement je pensais qu'il suffisait d'activer le wifi et non d'y être connecté (je ne sais pas pourquoi j'ai compris ça).

    Merci en tout, j'ai encore des erreurs mais je regarderai ça demain ^^.

  11. #11
    Invité de passage
    Homme Profil pro Gaëtan
    Étudiant
    Inscrit en
    janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Nom : Homme Gaëtan
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : janvier 2012
    Messages : 4
    Points : 3
    Points
    3

    Par défaut

    Hello !

    Je voulais utiliser (ou au moins tester) cette classe pour un projet que j'ai pour les cours, mais je n'arrive pas à savoir à quelle classe fait référence cette ligne :
    Code :
    String myAdress = Engine.getIpAddress();
    Ou se trouve la classe Engine ? Eclipse me propose deux import, mais il ne me semble pas correspondre à ce que je cherche (un pour les Wallpaper et l'autre pour le TextToSpeech ...).

  12. #12
    Invité de passage
    Homme Profil pro Gaëtan
    Étudiant
    Inscrit en
    janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Nom : Homme Gaëtan
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : janvier 2012
    Messages : 4
    Points : 3
    Points
    3

    Par défaut

    Finalement j'ai définit ma propre méthode getIpAddress() grâce à ce lien. Il faut juste penser à ajouter la permission android.permission.INTERNET à votre manifeste.

  13. #13
    Responsable Réseaux

    Avatar de ram-0000
    Homme Profil pro Raymond Mercier
    Consultant en sécurité
    Inscrit en
    mai 2007
    Messages
    11 071
    Détails du profil
    Informations personnelles :
    Nom : Homme Raymond Mercier
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2007
    Messages : 11 071
    Points : 45 366
    Points
    45 366

    Par défaut

    Cool cet article, exactement ce que je cherchais.

    Il arrive en 4eme position d'une recherche google "android udp broadcast".

    Dans mon cas, le but est d'établir une connexion TCP (sur un port inconnu par le client) avec un serveur sous Windows (l'adresse de ce serveur est aussi inconnue à l'avance) qui se trouve dans le réseau local, le broadcast UDP ne supporte pas (ou assez mal) le franchissement de routeurs.

    Donc une trame UDP broadcast et le serveur me retourne le numéro de port TCP (et son adresse par la même occasion) et ensuite, c'est à moi de jouer...

    Merci
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  14. #14
    Responsable Réseaux

    Avatar de ram-0000
    Homme Profil pro Raymond Mercier
    Consultant en sécurité
    Inscrit en
    mai 2007
    Messages
    11 071
    Détails du profil
    Informations personnelles :
    Nom : Homme Raymond Mercier
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2007
    Messages : 11 071
    Points : 45 366
    Points
    45 366

    Par défaut

    J'ajoute quelques limitations dues à l’émulateur ;

    • D'abord, il n'y a pas de WiFi sur l’émulateur
    • Ensuite l'adresse IP de l’émulateur est TOUJOURS 10.0.2.15
    • ensuite l'émulateur se trouve derrière un firewall virtuel qui fait de la NAT avec l'adresse IP de votre machine pour utiliser son adresse IP locale lorsqu'il part vers le réseau local


    Donc, pour que le code présenté fonctionne aussi bien dans un vrai device que dans l’émulateur, il faut ruser un peu :

    1/ Bien encadrer toutes les fonctions WiFi... et Dhcp... avec "if IsUseEmuletor()" afin de ne pas les utiliser dans l'émulateur (sinon, pointeur NULL ou exception)

    2/ L'adresse IP de broadcast de la machine hôte ne peut pas être devinée, il faut donc la fixer en dure avec un code du genre :
    Code :
    1
    2
    3
    4
    if(IsUseEmulator())
       broadcast = "192.168.1.255";
    else
       broadcast = GetBroadcastAddress();
    La fonction IsUseEmulator() pouvant être celle là par exemple :
    Code :
    boolean IsUseEmulator() { return "generic".equals(Build.BRAND); }
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  15. #15
    Invité de passage
    Homme Profil pro Zari Foued
    android
    Inscrit en
    mars 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Nom : Homme Zari Foued
    Âge : 25
    Localisation : Tunisie

    Informations professionnelles :
    Activité : android
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : mars 2014
    Messages : 1
    Points : 1
    Points
    1

    Par défaut

    @ en faite j'ai la meme faute mais j'arrive pas a la corriger "String myAdress = Engine.getipAddress();" j'ai deja mis
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    dans le fichier Manifest mais cette erreu est encore pouvez vous m'aider

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •