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