【问题标题】:Java - Wifi APIJava - Wifi API
【发布时间】:2013-03-29 23:20:56
【问题描述】:

我正在尝试找出是否有适用于 Java 的 Wifi API。可以连接到 Wifi 网络并对其进行扫描(以查找设备)的东西。我似乎找不到类似的东西。有什么建议?谢谢!

附: 我知道适用于 Android 的 WifiManager,但我不是为 Android 开发,我正在使用 JDK 6 进行开发。

【问题讨论】:

  • 我会说“除了 JNI”是不行的。这似乎是一项非常特定于操作系统的任务。例如。你必须在 Windows 上使用 WMI,在 Loonix 上使用 Wireless Tools,我猜在 OS X 上使用 /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport,谁知道在其他系统上是什么。
  • 我没有使用 JNI,因为我有 Ubuntu,并且在阅读 Stackoverflow 答案时,我似乎遇到了 JNI 仅适用于 Windows 的想法
  • 这显然是错误的。 JNI 是 Java 不可分割的一部分,它是 Java 实际工作所需的主要 FFI 机制。 (例如,在JDK 中实现native 不是内在函数的方法。)也就是说,如果您需要创建自己的绑定,我认为JNA 应该更方便。 (实际上可能已经提供了对 WMI 内容的绑定。)
  • 可以给我看一个使用JNI连接wifi网络或者扫描网络等的例子吗?
  • 不,因为我不知道 WMI 的实际工作原理,我害怕使用 JNI,并且相信一个完整的示例实际上超出了 SO 的范围来解释,因为涉及的移动部件的数量。也就是说,您也可以避免在 Windows 上使用 JNI(总是一件好事),因为有一个命令行工具可以这样做:hanselman.com/blog/…。您应该能够使用 ProcessBuilder 运行该工具并解析其输出。

标签: java networking wifi


【解决方案1】:

无线网卡因制造商甚至版本的不同而有很大差异,并且大多数操作系统都没有与它们交互的标准化方式。有些计算机甚至没有配备无线网卡。它与 Android 配合得如此出色的原因是,Google 可以保证每部安装了 Android 的手机都有适当的无线网络接口。

tl;博士不,对不起

【讨论】:

  • 您可以连接列表 wifi 网络,并使用 iwlist、wpa_supplicant、ifconfig 等 linux 命令连接到它们。因此,如果在它们之上有一个 JNI 实现,那么卡片细节就变得无关紧要了。
  • 为什么python的wifi模块可以做到呢?
  • @nabin 你指的python wifi 模块是什么?
【解决方案2】:

您可以借助命令行工具获取可用网络列表,使用命令“netsh wlan show networks mode=Bssid”。 试试下面的java方法。

public static ArrayList scanWiFi() {
        ArrayList<String> networkList = new ArrayList<>();
        try {
            // Execute command
            String command = "netsh wlan show networks mode=Bssid";
            Process p = Runtime.getRuntime().exec(command);
            try {
                p.waitFor();
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(p.getInputStream())
            );
            String line;
            StringBuilder sb = new StringBuilder();
            String ssidArr[];

            while ((line = reader.readLine()) != null) {
                //System.out.println(line);
                if (line.contains("SSID ") && !line.contains("BSSID ")) {
                    sb.append(line);
                    networkList.add(line.split(":")[1]);
                    //System.out.println("data : " + ssidArr[1]);
                }
            }
            //System.out.println(networkList);            
        } catch (IOException e) {
        }
        return networkList;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-26
    • 2011-03-02
    • 1970-01-01
    • 2011-01-30
    • 2017-08-17
    • 1970-01-01
    • 2023-03-30
    • 2018-07-10
    相关资源
    最近更新 更多