#java #desktop-application #ethernet
#java #desktop-приложение #ethernet
Вопрос:
Я хочу, чтобы сеть обнаружения была Wi-Fi или Ethernet на Mac и Windows.
NetworkInterface.getNetworkInterfaces()
Этот код может получить имя сетевого интерфейса, но я не знаю, что сеть — это wifi или Ethernet.Пожалуйста, помогите мне….
Комментарии:
1. Я бы предположил, что вы могли бы получить все сетевые интерфейсы, а затем использовать что-то вроде ping, чтобы узнать, будут ли они взаимодействовать с другим компьютером.
2. @Sedrick Как я могу узнать, является ли IP-связь с другим компьютером wifi или Ethernet?
3. Я пытаюсь выполнить пинг IP-адресов Wifi и Ethernet, похоже, они не имеют никакого значения.
Ответ №1:
(Если я понимаю ваш вопрос) Возможно, вы сможете попробовать что-то вроде просмотра Local Address
разных Network Interfaces
. Если у wlan
есть частный IP Address
, вы можете предположить, что он подключен к сети с использованием беспроводной технологии. Если у eth
есть частное IP Address
, вы можете предположить, что оно подключено к сети через Ethernet. Я не знаю, эффективно ли это на 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
имеет сетевое подключение.
Ответ №2:
Вы не можете знать, вам не нужно знать, в коде приложения. На уровне запуска приложений Java нет разницы между сетями, все, что у вас есть, это стек TCP / IP, и вы не можете определить на основе этого, над какой сетью вы работаете.
Вам нужно было бы написать что-то в машинном коде, которое взаимодействует с функциональностью операционной системы низкого уровня (и не спрашивайте меня, что или как, очевидно, это зависит от операционной системы), чтобы получить эту информацию.