Je souhaite obtenir l'adresse IP lors de la connexion au Wi-Fi avec Java

Première chose que j'ai essayée

Essayez d'utiliser InetAddress.getLocalHost ()

Pour le moment, lorsque j'ai cherché sur Google, cette page est sortie.  http://www.yukun.info/blog/2008/10/java-inetaddress-getlocalhost.html

C'est le résultat de la copie du cercle et de son exécution telle quelle. Une adresse IP que je n'ai pas reconnue a été sortie.  2017-04-12_23h11_41.png

Si vous inclinez la tête, lancez l'invite de commande et ipconfig. 2017-04-12_23h12_47.png

"Qui êtes vous!"

Je ne sais pas ce qui se passe dans d'autres environnements, mais au moins sur cette machine, j'ai trouvé que je ne pouvais pas obtenir l'adresse IP Wi-Fi en utilisant InetAddress.getLocalHost (). Même si vous continuez à rechercher sur Google, seuls les articles Android apparaîtront, il semble donc que vous deviez penser à une autre méthode même si vous la poussez.

Essayez d'utiliser la commande ipconfig du système d'exploitation Windows en Java

Comme vous pouvez le voir à l'invite de commande, j'ai pensé que je devrais pouvoir jouer avec cela du côté Java, j'ai donc décidé de l'essayer. J'ai googlé que Java devrait également avoir System () en langage C.

http://d.hatena.ne.jp/takami_hiroki/20101221/p1

Sur cette base, si vous obtenez la sortie par la commande du système d'exploitation ipconfig et l'affichez ... 2017-04-13_00h29_36.png

Oui c'était. Le code de caractère utilisé dans l'invite de commande de la version japonaise de Windows est Shift-JIS. J'ai essayé de faire la sortie et la chaîne de caractères après l'acquisition en UTF-8, mais cela ne s'est pas réalisé si j'étais un petit poisson ou une spécification.

@KIchiro nous a donné quelques conseils dans la section commentaires. Il semble que le résultat de l'exécution acquis puisse être converti en une chaîne de caractères avec n'importe quel code de caractère. Veuillez sauter les articles ci-dessous à partir d'ici et voir la section des commentaires. Quels ont été les quatre jours que j'ai passés ... </ font>

Je mettrai un coussin

Au cours de mes recherches, il s'est avéré que "les fichiers texte écrits en Shift-JIS peuvent être lus". Vous pouvez utiliser le fichier texte généré en exécutant "ipconfig> ip.txt". Comme un flux

ipconfig > ip.txt    ↓ Spécifiez le code de caractère Shift-JIS et lisez ip.txt    ↓ Recherche en utilisant indexOf () ou split ()    ↓ Supprimer ip.txt avec un visage innocent

Quel endroit, comme.

Pièges

Il convient de noter ici que le côté corps principal qui frappe la commande du système d'exploitation et le côté écriture qui renvoie le résultat après avoir été touché sont un traitement parallèle. Si vous commencez à lire sans attendre la fin du processus d'écriture, le professeur IOException viendra naturellement.

échantillon

Main.java



public class Main {
    public static void main(String[] args) {
        System.out.println(new getWiFiIP().get());
    }
}

getWiFiIP.java



import java.io.File;
import java.io.IOException;
import java.util.ArrayList;


public class getWiFiIP {

    private String ip="";

    public String get(){
        return ip;
    }


    public getWiFiIP() {

        try {

            ProcessBuilder pb=new ProcessBuilder("cmd.exe", "/c", "ipconfig",">","ip.txt");

            Process process = pb.start();   //Démarrez le processus
            process.waitFor();              //Attendez que l'exportation soit terminée

            ArrayList<String> list=new Text_read("ip.txt").getText(); //Lire le fichier texte


            int cnt=list.indexOf("Wireless LAN adapter Wi-Fi:");////////////////////////////////////////////////
            for(;;){
                if(list.get(cnt).indexOf("IPv4")==-1){
                    cnt++;
                }else{
                    break;
                }                                 //Wi du groupe de chaînes de caractères lu et acquis-Adresse IP de la connexion Fi(IPv4)Rechercher
            }////////////////////////////////////////////////////////////////////////////////////////////////////


            String[] temp=list.get(cnt).split(":"); //"Adresse IPv4. . . . . . . . . . . .: ×××.×××.×××.Puisqu'il s'agit de "XXX", divisez-le
            ip= temp[1];                            //Remplacez l'adresse IP acquise

            new File("ip.txt").delete();            //IP Mayt.Supprimer le txt

       ////////////////////////////////////////////////////La gestion des erreurs suivantes
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        if(ip.equals(""))ip= "Échoué à obtenir";
    }
}


Text_read.java




import java.io.*;
import java.util.ArrayList;

/////////////////////////////////////////////////////////
//Lisez le fichier texte entier et stockez-le dans ArrayList.//
/////////////////////////////////////////////////////////


public class Text_read {

    private ArrayList<String>text=new ArrayList<String>();      //ArrayList pour le stockage

    public Text_read(String path/*Chemin du fichier*/){

        try {
            BufferedReader br =new BufferedReader(new InputStreamReader(new FileInputStream(path), "Shift_JIS"));
            for(;;){
                text.add(br.readLine());
                if(text.get(text.size()-1)==null){              
                    text.remove(text.size()-1);                 
                    break;
                }
            }
            br.close();
        }catch(IOException e){
            System.out.println("Erreur d'E / S");
        }
    }

    public ArrayList<String> getText(){
        return text;                                            
    }
    
}


Cela a résolu le problème pour le moment, mais si quelqu'un connaît un moyen plus simple, faites-le moi savoir ...

Merci @KIchiro. </ font>

Recommended Posts