8
votes

Adresse de diffusion Android

Je fais une application de serveur client pour mon Android Téléphone.

J'ai créé un serveur udp dans python qui est assis et écoute les connexions.

Je peux mettre l'adresses IP IP directement similaire à 192.169.0.100 et il envoie des données bien. Je peux également mettre dans 192.168.0.255 et il trouve le serveur sur 192.169.0.100 .

est-il possible d'obtenir l'adresse de diffusion du réseau mon téléphone Android est connecté? Je ne vais jamais utiliser cette application sur mon wifi réseau ou autre wifi réseaux.

acclamations


0 commentaires

4 Réponses :


-2
votes

Comme l'adresse IP de la diffusion est l'adresse IP actuelle, mais la finition avec 255, vous pouvez faire quelque chose comme ceci:

public String getLocalIpAddress() {
    try {
        for (Enumeration<NetworkInterface> en = NetworkInterface
                .getNetworkInterfaces(); en.hasMoreElements();) {
            NetworkInterface intf = en.nextElement();
            for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                InetAddress inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress()) {
                    return inetAddress.getHostAddress().toString();
                }
            }
        }
    } catch (SocketException ex) {}
    return null;
}

public static String getBroadcast() throws SocketException {
    System.setProperty("java.net.preferIPv4Stack", "true");
    for (Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces(); niEnum.hasMoreElements();) {
        NetworkInterface ni = niEnum.nextElement();
        if (!ni.isLoopback()) {
            for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) {
                return interfaceAddress.getBroadcast().toString().substring(1);
            }
        }
    }
    return null;
}


5 commentaires

Cela rend l'hypothèse (éventuellement injustifiée) selon laquelle le masque Netmask est 255.255.255.255. Vous devriez réellement obtenir le masque Netmask associé à l'adresse que vous avez récupérée, puis calculez bcast = ipaddress | ~ Netmask


Je pensais que, comment voudriez-vous mettre en œuvre une telle chose? À votre santé


"L'adresse IP de la radiodiffusion étant l'adresse IP actuelle, mais une finition avec 25" ... non. Un réseau domestique typique a une tension BAST de .255, mais ce n'est pas vrai en général.


Un sous-réseau de classe C 192.168.0.1 -> 192.168.0.126 avec masque de sous-réseau de 255.255.255.128 a une adresse de diffusion de: 192.168.0.127


Merci, je vais uplifier votre réponse lorsque vous supprimez: "L'adresse IP de la diffusion est l'adresse IP actuelle, mais une finition avec 255"



7
votes

Voici une méthode qui devrait fonctionner: xxx


1 commentaires

Il jette une exception lorsque IPv6 a également utilisé, car il n'a aucune adresse de diffusion ni getBroadcast () renvoie NULL, Tostring () jette une exception. (Au moins sur mon émulateur Windows.) Facile à réparer, vérifiez simplement si InterfaceAddress.getBroadcast () est null ou non.




0
votes

Un moyen plus simple peut-être ... xxx


1 commentaires

Ne devrait-il pas être "255.255.255.255"?