我怎么知道应用程序是 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 Interfaces
的 Local 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
有网络连接。
我想在 mac 和 windows 检测网络是 wifi 还是以太网。
NetworkInterface.getNetworkInterfaces()
此代码可以获取网络接口的名称,但我不知道网络是wifi还是ethernet.Please帮帮我....
在应用程序代码中,您无法知道,您不应该知道。在 Java 应用程序 运行 级别,网络之间没有区别,您拥有的只是一个 TCP/IP 堆栈,您无法根据它确定您正在使用哪种网络上。
您必须用本机代码编写一些与低级操作系统功能接口的东西(不要问我是什么或如何,这显然取决于操作系统)才能获得该信息。
(如果我理解您的问题)您可以尝试查看不同 Network Interfaces
的 Local 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
有网络连接。