2

我想从充当热点的 android 设备进行广播,但使用 255.255.255.255 在 android 中不能用作 UDP 广播。但是 192.168.1.255 这个广播地址有效。当我检查设备的 IP 地址时,它显示 192.168.1.4。

现在如何从这个地址计算地址 192.168.1.255?

4

1 回答 1

3

好吧,如果你已经完成了广播并且只需要将地址的最后一个字节更改为 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 对应的接口。

于 2012-12-07T14:33:40.660 回答