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

时间:2019-04-23 06:05:07

标签: java desktop-application ethernet

我想在Mac和Windows上检测网络是wifi还是以太网。

NetworkInterface.getNetworkInterfaces()

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

2 个答案:

答案 0 :(得分:0)

在应用程序代码中,您可能不知道,也不需要知道。在Java应用程序运行的级别上,网络之间没有区别,您所拥有的只是一个TCP / IP堆栈,并且您无法基于该网络来确定正在使用哪种网络。

您必须用本机代码编写一些与低级操作系统功能交互的东西(不要问我什么或方式,显然取决于操作系统)来获取该信息。

答案 1 :(得分:0)

(如果我理解您的问题),您可以尝试尝试查看其他Local Address中的Network Interfaces。如果wlan有专用的IP Address,则可以假定它已使用无线技术连接到网络。如果eth具有专用的IP Address,则可以假定它是通过以太网连接到网络的。我不知道这是否100%有效。这不是我的区域。

import java.net.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ListNets {

    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;
            }
            //System.out.println("Preparing to using the interface: "+nif.getName());
            Enumeration<InetAddress> nifAddresses = nif.getInetAddresses();
            InetSocketAddress inetAddr= new InetSocketAddress(nifAddresses.nextElement(),0);

            //socket.bind(new InetSocketAddress(nifAddresses.nextElement(), 0));
            System.out.println("Preparing to using the interface: "+nif.getName());
            DatagramSocket socket = new DatagramSocket(inetAddr);
            System.out.println(socket.getLocalAddress());
            System.out.println("Interface setted");
        } catch (SocketException ex) {
            System.out.println(ex.toString());
        }
        catch(NoSuchElementException ex)
        {
            //System.out.println(ex.toString());
        }
     }
}