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

Java Discussion :

application ne focntionne pas sous linux


Sujet :

Java

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut application ne focntionne pas sous linux
    Bonjour,

    J'ai une petite application qui fonctionne sous windows xp mais pas sous linux.

    Mon application envoie/reçoit des trames UDP.

    J'ai le message d'erreur :
    java.net.UnknownHostException: localhost.localdomain: localhost.localdomain at java.net.InetAddress.getLocalHost (InetAddress.java:1353)...
    il y a deux endroits où j'utilise InetAddress dans mon programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pMyAddress = InetAddress.getLocalHost();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myAddress = InetAddress.getByName("255.255.255.255"); // envoie broadcast des données

    De quoi peut venir le problème ?

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    pour des raisons obscures, localhost semble ne pas avoir été défini sur ce linux, ce qui ressemble furieusement à une bourde d'installation de l'OS. Dans une console, que donnent ces commande?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    nslookup localhost
    ifconfig
    nslookup 127.0.0.1
    ping localhost
    ping 127.0.0.1

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    C'est bon j'ai trouvé le problème, sous linux on ne peut pas utiliser InetAddress.getLocalHost();

    voici ce que j'utilise (programme légèrement modifié issu de FAQ) :
    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
     
    	private List<InetAddress> getIps(){
    		List<InetAddress> ips = new ArrayList<InetAddress>();
     
    		try{
    			Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
     
    	         while (interfaces.hasMoreElements()) {  // carte reseau trouvee
    	            NetworkInterface interfaceN = (NetworkInterface)interfaces.nextElement(); 
    	            Enumeration<InetAddress> ienum = interfaceN.getInetAddresses();
    	            while (ienum.hasMoreElements()) {  // retourne l adresse IPv4 et IPv6
    	                InetAddress ia = ienum.nextElement();
    	                String adress = ia.getHostAddress().toString();
     
    	                if( adress.length() < 16){          //On s'assure ainsi que l'adresse IP est bien IPv4
     
    	                	if(adress.startsWith("127")){  //Ce n'est pas l'adresse IP Local' 
    	                    	System.out.println("Adresse locale : " + ia.getHostAddress());
    	                    } else if(adress.indexOf(":") > 0){
    	                    	System.out.println("Adresse non IPV4 : " + ia.getHostAddress()); // IPV6 ?
    	                    } else {
    	                		System.out.println("Adresse IPV4 : " + ia.getHostAddress());
    	    	                ips.add(ia);       	
    	                    }
    	                } else {
    	                	System.out.println("Adresse non IPV4 : " + ia.getHostAddress()); // IPV6 ?
    	                }
     
    	            }
    	        }
    	    }
    	    catch(Exception e){
    	        System.out.println("pas de carte reseau");
    	        e.printStackTrace();
    	    }
     
    	    return ips;
    	}
    => actuellement, je refuse les IPv6 car c'est ce qui est fait dans la FAQ ? mais y a t-il réellement un risque d'utiliser les IPV6 ?
    => s'il y a plusieurs cartes reséaux est-ce que le premier éléments de ma liste sera forcement la carte utilisée par défaut ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    oups j'ai répondu en même temps que toi... donc a priori il y a un problème ?

    Citation Envoyé par tchize_ Voir le message
    pour des raisons obscures, localhost semble ne pas avoir été défini sur ce linux, ce qui ressemble furieusement à une bourde d'installation de l'OS. Dans une console, que donnent ces commande?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    nslookup localhost
    ifconfig
    nslookup 127.0.0.1
    ping localhost
    ping 127.0.0.1


    nslookup localhost:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Server: 10.0.200.108
    Address: 10.0.200.108#53
     
    Non-authoritative answer:
    Name: local host
    Address : 127.0.0.1
    ifconfig:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    eth0   Link encap:Ethernet HWaddr 00:13:20:BC:D0:E2
             inet adr:10.0.200.99 Bcast:10.0.200.255 Masque:255.255.255.0
             ...
     
    lo      Link encap:Boucle locale
            inet adr:127.0.0.1 Masque:255.255.255.0
            adr inet6: ::1/128 Scope:Hôte
            UP LOOKBACK RUNNING MTU:16436 Metric:1
            .....

    nslookup 127.0.0.1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Server: 10.0.200.108
    Address: 10.0.200.108#53
     
    1.0.0.127.in-addr.arpa name: localhost
    ping localhost
    ping 127.0.0.1
    => fonctionnent


    Remarque : pour fonctionner, mon application a besoin de récupérr l'adresse IP de ma carte réseau et non l'adresse IP local (127.0.0.1)

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par boboss123 Voir le message
    C'est bon j'ai trouvé le problème, sous linux on ne peut pas utiliser InetAddress.getLocalHost();
    Ca fonctionne très bien, c'est ton linux qui est mal configuré je dirais. Ici sous linux avec getLocalHost, j'obtiens mon ip publique.
    mais y a t-il réellement un risque d'utiliser les IPV6
    Non, mais si tu transmet explicitement cette ip à l'extérieur, sur un hote qui ne comprend pas l'ipv6, il ne saura pas l'utiliser. Si tu fait juste un bind avec (créer un socket), y aura pas de soucis, l'OS va gérer les éventuelles transitions vers de l'ipv4
    => s'il y a plusieurs cartes reséaux est-ce que le premier éléments de ma liste sera forcement la carte utilisée par défaut ?
    Non, il n'y a pas de "carte par défaut" sur un OS.

  6. #6
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par tchize_ Voir le message
    Ca fonctionne très bien, c'est ton linux qui est mal configuré je dirais. Ici sous linux avec getLocalHost, j'obtiens mon ip publique.
    En fait il y a bien un problème avec getLocalHost(), c'est que son résultat peut être ambiguë : selon la configuration réseau du système cela peut renvoyer une valeur ou l'autre...

    En effet getLocalHost() récupère le nom de la machine, puis retourne l'adresse IP associé.

    En général sous Windows il n'y a jamais de problème, car le nom de la machine est toujours associé à l'adresse IP du réseau. Mais sous les autres systèmes, selon la configuration cela peut renvoyer soit l'IP du réseau, soit l'adresse de loopback 127.0.0.1...


    La solution consiste bien à parcourir les "NetworkInterface" à la recherche des adresses qui ne sont pas des loopback.


    a++

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    ok merci,
    Je vais donc rester sur ma solution (sachant que quand même ça ne gère pas les multi cartes réseaux => la solution ultime serait de pouvoir sélectionner soi même l'adresse IP parmi toutes celles disponibles s'il y a un problème mais je n'ai pas envi de m'embêter avec ça pour le moment)

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

Discussions similaires

  1. lien hypertext telnet ne marche pas sous linux
    Par RonnCmoi dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 28/04/2008, 11h35
  2. new File : fichier ne se crée pas sous Linux (Win OK)
    Par Christophe P. dans le forum Général Java
    Réponses: 4
    Dernier message: 09/04/2008, 11h33
  3. Réponses: 15
    Dernier message: 01/05/2007, 00h54
  4. .sh marche sous unix et pas sous linux
    Par Karim.1 dans le forum Linux
    Réponses: 6
    Dernier message: 11/08/2006, 09h18
  5. [Systeme] Process marche sous windows, pas sous linux
    Par Zapan dans le forum Général Java
    Réponses: 12
    Dernier message: 14/01/2006, 13h06

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