12

我们正在做一个用 Java 编码的项目(为 JRE 1.6 编译),并且需要一些帮助来处理一些看似复杂的功能:我们希望在连接特定无线网络时执行某些操作,例如当连接的 SSID=="myNetworkAtHome "或类似的。

在浏览了这个站点、google 和 Java 文档之后,我们离我们更近了一点。在这里查看代码后:http: //download.oracle.com/javase/tutorial/networking/nifs/retrieving.html

看起来我们已经接近了,但它遇到了死胡同,所有接口似乎都通过“net13”连接到“net0”(在我的笔记本电脑上)。我们根本无法从任何接口中获取 SSID . 我确实意识到示例中的代码只给出了接口名称而不是连接的网络,但它似乎没有提供一种获取连接的网络信息的方法。

对此的任何帮助都将非常有帮助!

4

3 回答 3

20

您无法在 Java 中访问此网络的低级详细信息。您可以通过该类获取网络接口的一些详细信息,NetworkInterface但如果您在提供的方法中看到,没有人与 Wifi 网络相关,也没有提供任何获取 SSID 的方法。如下所述,您应该通过使用 JNI 调用本机库或使用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(...) 并使用你的操作系统可用的命令行工具 (*nix = iwconfig) 并求助于解析。

于 2011-03-21T14:26:11.283 回答