Maison  >  Article  >  Java  >  Pourquoi mon application Android Ping ne parvient-elle pas à envoyer un ping aux adresses IP externes ?

Pourquoi mon application Android Ping ne parvient-elle pas à envoyer un ping aux adresses IP externes ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-11 08:45:02181parcourir

Why Does My Android Ping App Fail to Ping External IPs?

Pinger des adresses IP externes à partir de Java Android

Lors du développement d'une application Ping pour Android, il est courant de rencontrer des problèmes lors de la tentative de ping sur des serveurs externes. Bien que le ping IP local puisse fonctionner, l'accès aux adresses IP externes pose certains défis.

Une cause potentielle de ce problème peut être liée à l'accessibilité du serveur externe. Pour vérifier cela, pensez à modifier votre code pour envoyer un ping à différents serveurs externes, tels que 8.8.8.8 (Google DNS) ou 1.1.1.1 (Cloudflare DNS). Cela aidera à déterminer si le problème vient de l'adresse IP externe spécifique que vous ciblez ou de votre code.

Si vous avez vérifié l'accessibilité du serveur externe et que le problème persiste, examinez attentivement la syntaxe de votre code. La méthode InetAddress.isReachable() prend deux paramètres : l'adresse IP à envoyer au ping et une valeur de délai d'attente. Assurez-vous d'avoir défini une valeur de délai d'attente appropriée qui laisse suffisamment de temps pour que l'opération ping se termine.

De plus, assurez-vous d'avoir déclaré les autorisations nécessaires dans le manifeste de votre application. Vous devez déclarer explicitement l'autorisation android.permission.INTERNET, qui permet à votre application d'établir des connexions réseau.

Si vous avez vérifié tous ces aspects et que le problème persiste, envisagez d'utiliser une approche différente pour effectuer des pings IP externes. . Une méthode qui a été utilisée avec succès consiste à exécuter une commande shell via la méthode Runtime.exec(). Voici un exemple d'extrait de code qui illustre cette approche :

private boolean executeCommand(){
    System.out.println("executeCommand");
    Runtime runtime = Runtime.getRuntime();
    try
    {
        Process  mIpAddrProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
        int mExitValue = mIpAddrProcess.waitFor();
        System.out.println(" mExitValue "+mExitValue);
        if(mExitValue==0){
            return true;
        }else{
            return false;
        }
    }
    catch (InterruptedException ignore)
    {
        ignore.printStackTrace();
        System.out.println(" Exception:"+ignore);
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
        System.out.println(" Exception:"+e);
    }
    return false;
}

Cet extrait de code utilise la méthode Runtime.exec() pour exécuter la commande /system/bin/ping, qui vous permet d'envoyer une requête ping à une adresse IP externe. spécifiquement. L'option -c 1 spécifie qu'une seule requête ping doit être envoyée. La méthode renvoie une valeur booléenne indiquant si le ping a réussi (vrai) ou non (faux).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn