我想从充当热点的 android 设备进行广播,但使用 255.255.255.255 在 android 中不能用作 UDP 广播。但是 192.168.1.255 这个广播地址有效。当我检查设备的 IP 地址时,它显示 192.168.1.4。
现在如何从这个地址计算地址 192.168.1.255?
我想从充当热点的 android 设备进行广播,但使用 255.255.255.255 在 android 中不能用作 UDP 广播。但是 192.168.1.255 这个广播地址有效。当我检查设备的 IP 地址时,它显示 192.168.1.4。
现在如何从这个地址计算地址 192.168.1.255?
好吧,如果你已经完成了广播并且只需要将地址的最后一个字节更改为 255,你可以执行以下操作:
String getBroadcastAddress( final String address ) throws UnknownHostException {
InetAddress addr = InetAddress.getByName( address );
if( InetAddress instanceof Inet4Address ) {
byte[] bytes = addr.getAddress();
bytes[3] = 255;
return InetAddress.getByAddress( bytes ).getHostAddress();
} else {
... deal with ipv6
}
}
直接从 NetworkInterface 中提取广播地址,会产生以下代码:
public static String getBroadcast() throws SocketException {
System.setProperty("java.net.preferIPv4Stack", "true");
for( Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); interfaces.hasMoreElements(); ) {
NetworkInterface nif = interfaces.nextElement();
if( !nif.isLoopback() ) {
for( InterfaceAddress addr : nif.getInterfaceAddresses() ) {
return addr.getBroadcast().toString().substring(1);
}
}
}
return null;
}
您可能需要筛选 NetworkInterface 才能找到与内部 ip 对应的接口。