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

Entrée/Sortie Java Discussion :

Java détection type de réseau


Sujet :

Entrée/Sortie Java

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 100
    Par défaut Java détection type de réseau
    Bonjour,

    J'aimerais savoir s'il est posible, dans un pgm Java, de détecter si un PC (laptop) est connecté au réseau en Wifi ou en réseau cablé ?
    Par exemple, un utilisateur ne pourrait pas envoyer des datas s'il n'est pas connécté au wifi ou en cablé (et pas en 3G)...

    Merci.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Si c'est configurable par l'utilisateur, du style la boite "voulez vous autorisez les envoi via l'interface réseau machin", tu peux faire une mémorisation des adresses hardware des interfaces autorisées (via NetworkInterface.getHardwareAddress()); et utiliser InetAddress.isReachable pour savoir si c'est cette interface qu'on utilisera. Voir désactiver toute tentative de communication si tu détecte la présence d'un interface bien définie (genre la mac adresse d'un stick 3G bien précis)

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 100
    Par défaut
    Tout doit être transparent, l'utilisateur ne dois pas devoir faire de manipulation.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    il te faudra bien un critère de décision. tu pourrais embarquer une liste d'adresses mac à ne pas utiliser, associées à des constructeurs de clés 3G, mais bon courage pour les constituer.

    Quelles est la finalité? Pourquoi les données ne peuvent pas transiter par 3G?

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Pas la peine d'utiliser InetAddress.isReachable() qui n'est pas forcément fiable. Dans NetworkInterface tu as une méthode isUp() pour savoir si un réseau est actif ou pas...

    Il te suffit donc de parcourir les interfaces réseaux à la recherche de ceux qui sont actif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	// On récupère la liste des interfaces réseaux :
    	Enumeration<NetworkInterface> networks = NetworkInterface.getNetworkInterfaces();
    	while (networks.hasMoreElements()) {
    		NetworkInterface network = networks.nextElement();
    		// Si le réseau est actif ET ce n'est pas le réseau "loopback" :
    		if (network.isUp() && !network.isLoopback()) {
    			System.out.println(network.getName() + " : " + network.getDisplayName());
    		}
    	}
    Ensuite le nom du réseau peut t'aider à déterminer son type. Généralement c'est quelque chose comme eth0 pour de l’Ethernet, wlan0 pour du Wifi, eth0 pour de l'ADSL direct (sans routeur), etc.

    Avec un peu de chance les connexions 3G ont un nom bien spécifique...

    Sinon il faudra voir avec le "display name"... mais ce dernier dépend beaucoup de l'OS et peut être modifié par l'utilisateur.

    a++

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    si je suggérais isReachable, c'est parce que, malheureusement, ce n'est pas parce que tu a la liste des interfaces active, que tu peux savoir si c'est elle qui va router ta communication. Et comme java ne permet pas de créer des socket client utilisant un interface précise

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    si je suggérais isReachable, c'est parce que, malheureusement, ce n'est pas parce que tu a la liste des interfaces active, que tu peux savoir si c'est elle qui va router ta communication.
    Ouais dans l'idée je recherchais plus LA connexion active, sans penser qu'il pourrait y en avoir plusieurs...


    Citation Envoyé par tchize_ Voir le message
    Et comme java ne permet pas de créer des socket client utilisant un interface précise
    C'est possible !
    Il suffit de "binder" la socket sur l'adresse de l'interface :

    http://download.oracle.com/javase/tu...efinition.html


    a++

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    C'est possible !
    Il suffit de "binder" la socket sur l'adresse de l'interface :
    Non, ca ne marche que pour le coté serveur et, in extendo, pour le coté multicast. Pas pour le coté client. Quand tu fait un connect sur une machine distante en TCP, t'as pas le choix de l'adresse, puisque c'est l'OS qui la choisi en fonction de ses tables de routage :/ .

    Edit: ha ben je me suis fait entuber par le "use by" de la javadoc. Effectivement une fois qu'on a l'adresse associée à l'interface qu'on veux utiliser, on peux faire:

    Socket

    public Socket(InetAddress address,
    int port,
    InetAddress localAddr,
    int localPort)
    throws IOException

    Creates a socket and connects it to the specified remote address on the specified remote port. The Socket will also bind() to the local address and port supplied.

    If there is a security manager, its checkConnect method is called with the host address and port as its arguments. This could result in a SecurityException.

    Parameters:
    address - the remote address
    port - the remote port
    localAddr - the local address the socket is bound to
    localPort - the local port the socket is bound to

Discussions similaires

  1. [WIFI] détection d'adresse réseau
    Par just1980 dans le forum Hardware
    Réponses: 5
    Dernier message: 20/12/2006, 14h44
  2. java Sql Types
    Par Empty_body dans le forum JDBC
    Réponses: 5
    Dernier message: 05/12/2006, 11h21
  3. Problème de détection de mon réseau WIFI
    Par yaboki dans le forum Hardware
    Réponses: 6
    Dernier message: 06/07/2006, 11h43
  4. java et type Date sql server
    Par fadex dans le forum JDBC
    Réponses: 1
    Dernier message: 07/05/2006, 16h54
  5. [WINDOWS & JAVA] Détection lancement d'un nouveau proces
    Par Watou dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 17/10/2005, 11h39

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