Ich möchte die IP-Adresse erhalten, wenn ich mit Java eine Verbindung zu Wi-Fi herstelle

Als erstes habe ich es versucht

Versuchen Sie es mit InetAddress.getLocalHost ()

Als ich googelte, kam diese Seite vorerst heraus.  http://www.yukun.info/blog/2008/10/java-inetaddress-getlocalhost.html

Es ist das Ergebnis des Kopierens und Ausführens des Kreises. Eine IP-Adresse, die ich nicht erkannte, wurde ausgegeben.  2017-04-12_23h11_41.png

Wenn Sie den Kopf neigen, starten Sie die Eingabeaufforderung und ipconfig. 2017-04-12_23h12_47.png

"Wer bist du!"

Ich weiß nicht, was in anderen Umgebungen passiert, aber zumindest habe ich festgestellt, dass ich die Wi-Fi-IP mit InetAddress.getLocalHost () auf diesem Computer nicht erhalten konnte. Selbst wenn Sie weiter googeln, werden nur Android-Artikel angezeigt, sodass Sie anscheinend an eine andere Methode denken müssen, selbst wenn Sie sie drücken.

Versuchen Sie es mit dem Windows-Befehl ipconfig in Java

Da Sie es an der Eingabeaufforderung sehen können, dachte ich, dass ich auf der Java-Seite damit herumspielen sollte, also beschloss ich, es zu versuchen. Ich habe gegoogelt, dass Java auch System () in C-Sprache haben sollte.

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

Basierend darauf, wenn Sie die Ausgabe vom OS-Befehl ipconfig erhalten und anzeigen ... 2017-04-13_00h29_36.png

Ja, war es. Der in der Eingabeaufforderung der japanischen Windows-Version verwendete Zeichencode lautet Shift-JIS. Ich habe versucht, die Ausgabe und die Zeichenkette nach der Erfassung in UTF-8 zu erstellen, aber es wurde nicht wahr, ob ich ein kleiner Fisch oder eine Spezifikation war.

@KIchiro gab uns einige Ratschläge in den Kommentaren. Es scheint, dass das erfasste Ausführungsergebnis mit einem beliebigen Zeichencode in eine Zeichenfolge konvertiert werden kann. Bitte überspringen Sie die Artikel unten von hier und lesen Sie den Kommentarbereich. Was waren die vier Tage, die ich verbracht habe ... </ font>

Ich werde ein Kissen legen

Als ich nachforschte, stellte sich heraus, dass "in Shift-JIS geschriebene Textdateien gelesen werden können". Sie können die Textdatei verwenden, die durch Ausführen von "ipconfig> ip.txt" generiert wurde. Als Fluss

ipconfig > ip.txt    ↓ Geben Sie den Zeichencode als Shift-JIS an und lesen Sie ip.txt    ↓ Suche mit indexOf () oder split ()    ↓ Löschen Sie ip.txt mit einem unschuldigen Gesicht

Was für ein Ort wie.

Tücken

Hierbei ist zu beachten, dass die Hauptteilseite, die den OS-Befehl trifft, und die Schreibseite, die das Ergebnis nach dem Treffer zurückgibt, parallel verarbeitet werden. Wenn Sie mit dem Lesen beginnen, ohne auf den Abschluss des Schreibvorgangs zu warten, wird der IOException-Lehrer natürlich kommen.

Stichprobe

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();   //Starten Sie den Prozess
            process.waitFor();              //Warten Sie, bis der Export abgeschlossen ist

            ArrayList<String> list=new Text_read("ip.txt").getText(); //Textdatei lesen


            int cnt=list.indexOf("Wireless LAN adapter Wi-Fi:");////////////////////////////////////////////////
            for(;;){
                if(list.get(cnt).indexOf("IPv4")==-1){
                    cnt++;
                }else{
                    break;
                }                                 //Wi aus der Zeichenkettengruppe gelesen und erfasst-IP-Adresse der Fi-Verbindung(IPv4)Suchen nach
            }////////////////////////////////////////////////////////////////////////////////////////////////////


            String[] temp=list.get(cnt).split(":"); //"IPv4-Adresse. . . . . . . . . . . .: ×××.×××.×××.Da es "XXX" ist, teilen Sie es
            ip= temp[1];                            //Ersetzen Sie die erfasste IP-Adresse

            new File("ip.txt").delete();            //Mayt ip.Txt löschen

       ////////////////////////////////////////////////////Die folgende Fehlerbehandlung
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        if(ip.equals(""))ip= "Fehlgeschlagen zu bekommen";
    }
}


Text_read.java




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

/////////////////////////////////////////////////////////
//Lesen Sie die gesamte Textdatei und speichern Sie sie in ArrayList.//
/////////////////////////////////////////////////////////


public class Text_read {

    private ArrayList<String>text=new ArrayList<String>();      //ArrayList zur Speicherung

    public Text_read(String path/*Dateipfad*/){

        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("E / A-Fehler");
        }
    }

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


Dies löste es vorerst, aber wenn jemand einen einfacheren Weg kennt, lass es mich wissen ...

Vielen Dank, dass Sie @KIchiro. </ font>

Recommended Posts