12

Java でコード化されたプロジェクト (JRE 1.6 用にコンパイル) を実行しており、少し複雑な機能について助けが必要です: 特定のワイヤレス ネットワークが接続されている場合、たとえば接続されている SSID=="myNetworkAtHome の場合に、特定のアクションを実行したいです。 " または類似。

このサイト、Google、および Java のドキュメントを調べた後、少し近づいてきました。ここでコードを見た後: http://download.oracle.com/javase/tutorial/networking/nifs/retrifying.html

近づいていたようですが、行き止まりになりました。すべてのインターフェイスが「net13」を介して「net0」に接続されているようです(私のラップトップでは)。また、どのインターフェイスからも SSID を取得できません。 . この例のコードは、接続されたネットワークではなくインターフェース名のみを提供していることに気付きましたが、接続されたネットワーク情報を取得する方法を提供していないようです。

これに関するヘルプは非常に役立ちます。

4

3 に答える 3

20

Javaでは、ネットワークのこの低レベルの詳細にアクセスすることはできません。クラスとのネットワークインターフェイスの詳細を取得できますがNetworkInterface、提供されたメソッドを見ると、Wifiネットワークに関係する人は誰もいませんし、SSIDを取得する方法も提供されていません。以下で指摘するように、JNIを使​​用してネイティブライブラリを呼び出すか、を使用してOSツールを呼び出すことにより、いくつかのネイティブ機能を使用する必要がありますRuntime

Javaはそのようなことを行うようには設計されておらず、プラットフォームに依存しない方法で実装するのは困難であり、ハードウェアレベルの詳細は原則としてJavaで管理できません。

同じことが3G、GPRSなどの他のネットワークにも当てはまります...アプリケーションは接続タイプやその詳細を認識してはなりません。Javaはトランスポート(TCP)レベルでのみ管理でき、ネットワーク(IP)ではなくリンク(3G、Wifi、イーサネットなど)で管理できるため、ソケットのみを管理できます。

于 2011-03-21T16:50:05.780 に答える
6
 ArrayList<String>ssids=new ArrayList<String>();
    ArrayList<String>signals=new ArrayList<String>();
    ProcessBuilder builder = new ProcessBuilder(
            "cmd.exe", "/c", "netsh wlan show all");
    builder.redirectErrorStream(true);
    Process p = builder.start();
    BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line;
    while (r.read()!=-1) {
        line = r.readLine();
        if (line.contains("SSID")||line.contains("Signal")){
            if(!line.contains("BSSID"))
                if(line.contains("SSID")&&!line.contains("name")&&!line.contains("SSIDs"))
                {
                    line=line.substring(8);
                    ssids.add(line);

                }
                if(line.contains("Signal"))
                {
                    line=line.substring(30);
                    signals.add(line);

                }

                if(signals.size()==7)
                {
                    break;
                }

        }

    }
    for (int i=0;i<ssids.size();i++)
    {
        System.out.println("SSID name == "+ssids.get(i)+"   and its signal == "+signals.get(i)  );
    }
于 2015-05-18T07:08:18.977 に答える
4

JNI ソリューションに頼る必要があります。http://sourceforge.net/projects/jwlanscanで入手できるものがありますが、これは Windows システムでのみ機能します。または、醜い方法で Runtime.getRuntime().exec(...) を使用し、OS で利用可能なコマンド ライン ツール (*nix = iwconfig) を使用して、解析に頼ることもできます。

于 2011-03-21T14:26:11.283 に答える