如何获得主机';默认网络适配器的广播地址?JAVA

如何获得主机';默认网络适配器的广播地址?JAVA,java,networking,Java,Networking,如何在Java中获取默认网络适配器的主机广播地址?尝试以下操作: Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); while (interfaces.hasMoreElements()) { NetworkInterface networkInterface = interfaces.nextElement(); if (networkInterf

如何在Java中获取默认网络适配器的主机广播地址?

尝试以下操作:

Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) 
{
    NetworkInterface networkInterface = interfaces.nextElement();
    if (networkInterface.isLoopback())
        continue;    // Do not want to use the loopback interface.
    for (InterfaceAddress interfaceAddress : networkInterface.getInterfaceAddresses()) 
    {
        InetAddress broadcast = interfaceAddress.getBroadcast();
        if (broadcast == null)
            continue;

        // Do something with the address.
    }
}
Enumeration interfaces=NetworkInterface.getNetworkInterfaces();
while(interfaces.hasMoreElements())
{
NetworkInterface NetworkInterface=interfaces.nextElement();
if(networkInterface.isLoopback())
continue;//不想使用环回接口。
对于(InterfaceAddress InterfaceAddress:networkInterface.GetInterfaceAddress())
{
InetAddress广播=interfaceAddress.getBroadcast();
如果(广播==null)
持续
//对地址做点什么。
}
}
试试这个:

Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) 
{
    NetworkInterface networkInterface = interfaces.nextElement();
    if (networkInterface.isLoopback())
        continue;    // Do not want to use the loopback interface.
    for (InterfaceAddress interfaceAddress : networkInterface.getInterfaceAddresses()) 
    {
        InetAddress broadcast = interfaceAddress.getBroadcast();
        if (broadcast == null)
            continue;

        // Do something with the address.
    }
}
Enumeration interfaces=NetworkInterface.getNetworkInterfaces();
while(interfaces.hasMoreElements())
{
NetworkInterface NetworkInterface=interfaces.nextElement();
if(networkInterface.isLoopback())
continue;//不想使用环回接口。
对于(InterfaceAddress InterfaceAddress:networkInterface.GetInterfaceAddress())
{
InetAddress广播=interfaceAddress.getBroadcast();
如果(广播==null)
持续
//对地址做点什么。
}
}

与预期答案相同,但带有流。
(未检查它是否有性能或任何其他优势)

所有可用广播地址的流:


与预期答案相同,但带有
(未检查它是否有性能或任何其他优势)

所有可用广播地址的流:


如何知道哪个广播是默认网络适配器?循环在我的一台机器上返回大约4个广播地址。我认为没有任何方法可以确定Java中的默认适配器。可能无法为此编写与O/S无关的代码,这可能就是为什么Java中没有这样做的方法。我如何知道哪个广播是默认的网络适配器?循环在我的一台机器上返回大约4个广播地址。我认为没有任何方法可以确定Java中的默认适配器。可能无法为此编写与O/S无关的代码,这可能就是为什么在Java中没有这样做的方法。
public static Optional<InetAddress> getBroadcastAddress(boolean ignoreLoopBack) 
throws SocketException {
    return NetworkInterface.networkInterfaces()
            .filter(n -> !ignoreLoopBack || notLoopBack(n))
            .map(networkInterface ->
                    networkInterface.getInterfaceAddresses()
                        .stream()
                        .map(InterfaceAddress::getBroadcast)
                        .filter(Objects::nonNull)
                        .findFirst()
            )
            .filter(Optional::isPresent)
            .map(Optional::get)
            .findFirst();
}
private static boolean notLoopBack(NetworkInterface networkInterface) {
    try {
        return !networkInterface.isLoopback();
    } catch (SocketException e) {
        // should not happen, but if it does: throw RuntimeException
        throw new RuntimeException(e);
    }
}