如何获取我的Android设备的子网掩码充当热点?

时间:2012-12-07 08:16:48

标签: android networking udp ip-address broadcast

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

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

1 个答案:

答案 0 :(得分: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相对应的那个。