我怎么知道应用程序是 link 到 wifi 或以太网使用 java?

How can I know the application is link to wifi or ethernet use java?

我想在 mac 和 windows 检测网络是 wifi 还是以太网。

NetworkInterface.getNetworkInterfaces()

此代码可以获取网络接口的名称,但我不知道网络是wifi还是ethernet.Please帮帮我....

在应用程序代码中,您无法知道,您不应该知道。在 Java 应用程序 运行 级别,网络之间没有区别,您拥有的只是一个 TCP/IP 堆栈,您无法根据它确定您正在使用哪种网络上。

您必须用本机代码编写一些与低级操作系统功能接口的东西(不要问我是什么或如何,这显然取决于操作系统)才能获得该信息。

(如果我理解您的问题)您可以尝试查看不同 Network InterfacesLocal Address。如果 wlan 有一个私人 IP Address,您可以假设它使用无线技术连接到网络。如果 eth 有一个私有的 IP Address,您可以假设它是通过以太网连接到网络的。我不知道这是否100%有效。这不是我的领域。

import java.net.*;
import java.util.*;

public class Main {

    public static void main(String args[]) throws SocketException {

        Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
        for (NetworkInterface netint : Collections.list(nets))
            displayInterfaceInformation(netint);
    }

    static void displayInterfaceInformation(NetworkInterface netint) {
        try {
            NetworkInterface nif = netint;
            if(nif==null){
                System.err.println("Error getting the Network Interface");
                return;
            }

            Enumeration<InetAddress> nifAddresses = nif.getInetAddresses();
            InetSocketAddress inetAddr= new InetSocketAddress(nifAddresses.nextElement(),0);

            System.out.println("Interface: " + nif.getName());
            DatagramSocket socket = new DatagramSocket(inetAddr);
            System.out.println(socket.getLocalAddress());
            System.out.println("");
        } catch (SocketException ex) {
            System.out.println(ex.toString());
        }
        catch(NoSuchElementException ex)
        {
            //System.out.println(ex.toString());
        }
     }
}  

输出

Interface: lo
/127.0.0.1

Interface: eth4 //Number changed!
/131.555.555.55

查看此输出,我会假设 eth4 有网络连接。